quick and dirty api boilerplate

Craig Fletcher 93c4277c65 Some refactoring, some clarification, etc. há 4 anos atrás
src 93c4277c65 Some refactoring, some clarification, etc. há 4 anos atrás
.env.example 086655b567 Add docker-compose há 4 anos atrás
.eslintrc.cjs 4337b08561 Initial commit há 4 anos atrás
.gitignore 086655b567 Add docker-compose há 4 anos atrás
.nvmrc 4337b08561 Initial commit há 4 anos atrás
.prettierrc 4337b08561 Initial commit há 4 anos atrás
README.md 93c4277c65 Some refactoring, some clarification, etc. há 4 anos atrás
docker-compose.yml 086655b567 Add docker-compose há 4 anos atrás
package-lock.json 8de3d7b176 Add logging há 4 anos atrás
package.json 8de3d7b176 Add logging há 4 anos atrás

README.md

Easy API boilerplate

Quick and dirty API boilerplate, using:

  • Redis for the DB
  • Yup for validation
  • Restify for the web server/routing
  • Winston for logging
  • ESLint for linting

There are many limitations to this configuration, it is intended as a debugging/prototyping tool.

There are fairly few dependencies and most things are simply factories with instances passed in.

Usage

Import start from easy-api.js, call like so:

start({
  routes[], 
  host, 
  port, 
  redisOpts{}, 
  restifyOpts{}
})

The included example uses docker and docker-compose, so the db host is set to "redis" and the restify server listens on 0.0.0.0. You'll need to rename .env.example to .env and change the password.

Storage

Objects are stored in redis by calculating the sha256 hash, hex digest from a "path" array for convenience (e.g. ["users", req.params.userName, "stats", "visits"]).

There is no hardening or security intention behind this - it's simply a fast hash to use as an ID.

Routes

Routes are defined as simple factories, passed a db wrapper, yup and log instance as an object ({db, yup, log}) and expected to return:

  • verb: HTTP verb, e.g. get
  • path: restify path string, e.g. /api/hello/:name
  • handler: restify handler function for route
  • schema (optional): yup schema to validate against

Validation

If a route passes a schema, the request will be validated against it:

  • get requests validate against req.params
  • post requests validate against req.body

When validation fails, a HTTP 400 is returned and the handler is not processed.