catapult_edm
v1.0.6
Published
Express JS addon for writing Web APIs
Maintainers
Readme
catapult
Catapult is a Web API abstraction tool. The aim of this package is to simplify adding data endpoints to a NodeJS application/server. The generated API endpoints follow RFC 7231. Here is a quick guide of how this works :
For the following example to work, you must have MongoDB running.
Import package
var catapult = require("catapult_edm")Setup Components
Initialize the RouteMapper and pass the Mongoose Connector provided with the package :
var RouteMapper = new catapult.RouteMapper(
catapult.MongooseConnector
)Now add a few Mongoose models to access through REST API
const mongoose = require('mongoose');
mongoose.connect(
'mongodb://localhost:27017/test', {
useNewUrlParser: true,
useUnifiedTopology: true
}
);
var Pet = {
name: String
}
// resource name will be `cats`
const Cat = mongoose.model('Cat', Pet );
const Dog = mongoose.model('Dog', Pet );
models = {
Cat,
Dog
}Generate API
Add the models to the route mapper.
RouteMapper.add(models.Cat, models.Dog)
var router = RouteMapper.getRouter()Mount a path for your new endpoints
app.use("/",router)Web Interface
Once the route mapper is configured and linked to your express server, you can access your data with the following request combinations. Keep in mind that <model name> is the API resource name your data connector returns. The table below will assume that your router is mounted at server root. In Mongoose land, <object id> is the string representation of field _id within your MongoDB object.
|Request Verb | Registered Express Path | Request Body| Result |
|--|--| --| --|
| POST | /<model name> | JSON string of object to add. { "name" : "Fluffo" } with the models defined above in mind | Newly created object. As a json string. Submit an Array to bulk insert items. ie : [{ "name" : "Fluffo"}] |
| GET | /<model name>?query=val | N/A | A list of objects. Query parameters are optional, but can be used to filter results based on a passed string value.
| PUT | /<model name>/<object id> | JSON string with object updates | JSON object with success message.
| GET | /<model name>/<object id> | N/A | JSON object with the ID of the requested object. null is returned if the object is not found.
| GET | /<model name>/find?query=val | N/A | Find an individual record based on query supplied.
| DELETE | /<model name>/<object id> | N/A | JSON object with success message, otherwise null
Sample commands with curl:
Get all cats :
curl -XGET 'http://localhost:3000/cats'Add a new cat record :
curl -XPOST -H "Content-type: application/json" -d '{ "name" : "Fluffo" }' 'http://localhost:3000/cats'Update a cat record :
curl -XPUT -H "Content-type: application/json" -d '{ "name" : "Fluff" }' 'http://localhost:3000/cats/608d41ca30f954cbf1d11170'