quick and dirty api boilerplate

Craig Fletcher 9cc986abab Tweak logging 4 lat temu
src 9cc986abab Tweak logging 4 lat temu
.eslintrc.cjs 4337b08561 Initial commit 4 lat temu
.gitignore 8de3d7b176 Add logging 4 lat temu
.nvmrc 4337b08561 Initial commit 4 lat temu
.prettierrc 4337b08561 Initial commit 4 lat temu
README.md 6aa11dd37a Update README 4 lat temu
package-lock.json 8de3d7b176 Add logging 4 lat temu
package.json 8de3d7b176 Add logging 4 lat temu

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 in this boilerplate, and most things are simply factories with instances passed in.

Usage

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

start(
  routes[], 
  host = '127.0.0.1', 
  port = 8080, 
  dbOpts{}, 
  serverOpts{}
)

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:

  • type: HTTP verb, e.g. get
  • route: 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.data