vineyard-lawn
TypeScript icon, indicating that this package has built-in type declarations

0.5.5 • Public • Published

Vineyard Lawn

Vineyard Lawn is a wrapper for Express.js that provides a high level API for defining JSON web services.

Most tools used to create web services are designed primarily to serve HTML pages and any web service support is an additional feature. Lawn specializes exclusively in creating JSON web services. Some of its features include:

  • Consistent use of JSON. Lawn will never return an HTML response.
  • A single point in code that sends HTTP responses.
  • All endpoint handlers either return a promise or throw an error.
  • Automatic merging of query and post data.
  • Simplified request objects that only contain the essentials for standard endpoint logic.
  • Merging of POST data and query parameters.
  • Built-in support for JSON Schema validation.
  • Built-in support for versioning.

If an endpoint needs more flexibility it can bypass Lawn and be directly defined in Express.

API Examples

TypeScript

import * as lawn from 'vineyard-lawn'
import {Method, HTTP_Error, Bad_Request} from 'vineyard-lawn'

lawn.create_endpoints(app, [
  {
    method: Method.get,
    path: "adventure",
    action: request => {
      const response = {}
      return Promise.resolve(response)
    }
  },
  {
    method: Method.post,
    path: "adventure",
    action: request => {
      if (!request.data.page)
        throw new Bad_Request("Missing 'page' argument.")

      return Promise.resolve({})
    }
  },
])

Node.js 4.0+

const lawn = require('vineyard-lawn')

lawn.create_endpoints(app, [
  {
    method: lawn.Method.get,
    path: "adventure",
    action: request => {
      const response = {}
      return Promise.resolve(response)
    }
  },
  {
    method: lawn.Method.post,
    path: "adventure",
    action: request => {
      if (!request.data.page)
        throw new Bad_Request("Missing 'page' argument.")
      
      const response = {}
      return Promise.resolve(response)
    }
  },
])

Server Helper

Lawn also provides an optional, CORS-enabled Server class. It streamlines some of the common tasks used to create a Lawn server.

TypeScript Example

import * as lawn from 'vineyard-lawn'
const config = require('../config/config.json')

const server = new lawn.Server()
lawn.create_endpoints(server.get_app(), ...)
server.start(config.api)

While the above example demonstrates directly using Lawn's Server object, it is recommended to wrap a Lawn Server inside a project-specific Server object, such as:

import * as lawn from 'vineyard-lawn'
const config = require('../config/config.json')

export class Server {
    server: lawn.Server = new lawn.Server()
    
    start() {
        return this.server.start(config.api)
    }
}

Readme

Keywords

none

Package Sidebar

Install

npm i vineyard-lawn

Weekly Downloads

0

Version

0.5.5

License

MIT

Last publish

Collaborators

  • silentorb