37d9afbf15d045cab67c95fceffd082c08b36efd
[squeep-api-dingus] / README.md
1 # Another In-House API Server Frameworklet
2
3 I just wanted a basic little API server for toy projects, without having to park a container-ship of modules under it.
4
5 This is in no way intended to replace any mature, full-featured framework. It is spartan in some aspects, brings some unexpected baggage in others, makes some questionable design decisions, has the occasional opinion, and is likely somewhat idiosyncratic from an outside perspective.
6 The primary design goals are:
7 - self-contained: as few external dependencies as feasible
8 - not-infinitely-extensible: only does the things it needs to do as dictated by the projects it is used in
9
10 ## Getting Started
11
12 Construct it with a console-level-compatible logger capable of doing something meaningful with calls like level(scopeString, messageString, dataObject).
13
14 Within the server request handler:
15 * dispatch(req, res) makes things go.
16
17 Within the application implementation:
18 * on(method, urlPath, handler) declares a thing to do when a request matches.
19 * preHandler(req, res, ctx) can be overridden to do something to every request before it is handled.
20
21 Handled content types can be extended by overriding:
22 * parseBody(contentType, ctx) for incoming types.
23 * renderError(contentType, err) for outgoing types.
24
25 Within your handlers:
26 * setResponseType(responseTypes, req, res, ctx) can be called to negotiate content types.
27 * async ingestBody(req, res, ctx) will parse request body data.
28 * throw an Error.ResponseError with an Enum.ErrorResponse for a simple status code with optional details, when something goes awry.
29
30 Parameters and metadata are set in each request context.
31