jsonapi-server
NOTE: This is a fork of holidayextra's jsonapi-server
The difference being our fork uses integer autoincrement ids instead of UUIDs.
Apart from that, it is exactly the same implementation
You'd want to use our version of jsonapi-store-[*] plugins with this
as the original versions will not be compatible with this
The rest of the readme is verbatim copy of the original project
A config driven NodeJS framework implementing json:api
and GraphQL
. You define the resources, it provides the api.
Motivation / Justification / Rationale
This framework solves the challenges of json:api and GraphQL without coupling us to any one ORM solution. Every other module out there is either tightly coupled to a database implementation, tracking an old version of the json:api spec, or is merely a helper library for a small feature. If you're building an API and your use case only involves reading and writing to a data store... well count yourself lucky. For everyone else, this framework provides the flexibility to provide a complex API without being confined to any one technology.
A config driven approach to building an API enables:
- Enforced json:api responses
- Automatic GraphQL schema generation
- Request validation
- Payload validation
- Automatic documentation generation
- Automatic inclusions
- Automatic routing
- Automatic handling of relationships
Ultimately, the only things you as a user of this framework need to care about are:
- What are my resources called
- What properties do my resources have
- For each resource, implement a
handler
for:
create
ing a resourcedelete
ing a resourcesearch
ing for many resourcesfind
ing a specific resourceupdate
ing a specific resource
We've created handler
s to automatically map our config over to database solutions help people get off the ground:
We've also written a library to ease the consumption of a json:api compliant service, if GraphQL isn't your thing:
Full documentation
The tl;dr
You can have a complete json:api server providing a photos
resource with just this:
var jsonApi = require("jsonapi-server");
jsonApi.setConfig({
port: 16006,
graphiql: true
});
jsonApi.define({
resource: "photos",
handlers: new jsonApi.MemoryHandler(),
attributes: {
title: jsonApi.Joi.string(),
url: jsonApi.Joi.string().uri(),
height: jsonApi.Joi.number().min(1).max(10000).precision(0),
width: jsonApi.Joi.number().min(1).max(10000).precision(0)
}
});
jsonApi.start();
Your new API will be alive at http://localhost:16006/
and your photos
resources will be at http://localhost:16006/photos
. The GraphiQL interface will be available at http://localhost:16006/
.
Show me a full example!
Fire up an example json:api
server using the resources mentioned in the official spec via:
$ git clone https://github.com/coding-blocks/jsonapi-server.git
$ npm install
$ npm start
then browse to the JSON:API endpoints:
http://localhost:16006/rest/photos
or, for GraphQL:
http://localhost:16006/rest/
the example implementation can be found here