rest-sugar makes it easy to implement yummy REST APIs
The whole point of this library is to make it easy to implement simple yet powerful REST APIs. There are a few extension points you can hook into. mongoose-sugar complements this particular library very well. It is possible to implement similar solutions for other backends too as long as you stick to the sugar-spec.
Even though the library has been designed based on Express, it might be possible to make it work with other similar libraries too given they use Express conventions. This might take some kind of an adapter.
The following urls contain a prefix given at init.
- GET /? (ie. /api/v1) -> API metadata (ie. schema and help)
- GET /<api> -> Get all
- GET /<api>?name=foobar -> Get all with the matching name
- GET /<api>?limit=25&offset=50 -> Get with pagination
- GET /<api>/count -> Get count
- GET /<api>?fields=name,color -> Get name and color fields only
- POST /<api>?name=foobar -> Create new item with the given name
- PUT /<api> -> Disallowed, gives 403 error
- DELETE /<api> -> Disallowed, gives 403 error
Note that it is possible to mix and match various GETs above. The following urls operate on a specific resource (ie. /<api>/<id>).
- GET /<api>/<id> -> Get resource matching to the id
- POST /<api>/<id> -> Disallowed, gives 403 error
- PUT /<api>/<id>?name=joe -> Updates the content of the given resource with the given field data
- DELETE /<api>/<id> -> Deletes the given resource. Returns an empty structure if successful.
In case you want to use some authentication method (preferable!) or
customize the behavior further, consider using middlewares. You may attach
post middleware handlers.
pre ones are performed before an
actual database query performed whereas
post ones are after. The basic syntax
resembles Express. See the example below:
var api = restapp '/api/v1'authors: modelsAuthorsugar;apipreapiuserestonly'GET';apiuserestkeyAuthname: 'apikey' value: 'secret';apiuse// do your magic nownext; // call or else...;;// api.post is identical except the functions get an extra parameter containing// the data fetched from the database. You may then use that data to trigger// further actions for instance
Examine the tests included with the project for more complete examples.
rest-sugar is available under MIT. See LICENSE for more details.