Skip to content

pimatic/decl-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Mar 24, 2019
bd78cf3 · Mar 24, 2019

History

64 Commits
Feb 13, 2019
Feb 13, 2019
Feb 13, 2019
May 29, 2014
Feb 13, 2019
Jun 14, 2014
Feb 10, 2019
Jun 21, 2014
Feb 13, 2019
Feb 10, 2019
Feb 13, 2019
Mar 24, 2019

Repository files navigation

decl-api

Declarative API definition for REST and real time APIs.

API-Definition

An API is defined by a JSON object:

declapi = require('../index.js')
t = declapi.types

api = {}
api.todo = {
  actions:
    listTasks:
      rest:
        type: "GET"
        url: "/api/tasks"
      description: "Lists all tasks"
      params: {}
      result:
        tasks:
          type: t.array 
    getTask:
      description: "Get a task by id"
      rest:
        type: "GET"
        url: "/api/tasks/:taskId"
      params:
        taskId:
          type: t.string
      result:
        task:
          type: t.object
    addTask:
      description: "Adds a task"
      rest:
        type: "POST"
        url: "/api/tasks"
      params:
        taskId:
          type: t.string
        task:
          type: t.object
          properties:
            description:
              type: t.string
            done:
              type: t.boolean
              optional: yes
      result:
        task:
          type: t.object
          properties:
            description:
              type: t.string
            done:
              type: t.boolean
}

Implementation

Your Controller must implement the declared functions:

TodoApp = {
  tasks: []
  listTasks: -> @tasks
  getTask: (taskId) -> 
    for t in @tasks
      if t.id is taskId
        return task
    return null
  addTask: (taskId, task) ->
    unless task.done then task.done = no
    task.id = taskId
    @tasks.push task
    return task
}

Binding

Express

app = # Your express app
declapi = env.require 'decl-api'
todoApp = new TodoApp()
declapi.createExpressRestApi(app, api.todo, todoApp)

REST-API

listTasks

Returns the task list as JSON object

GET /api/tasks 
RESPONSE {success: true, tasks: [...]}

addTask

Creates a task with the id: someId and returns it as JSON object

POST /api/tasks/someId
task[description]="some description"
task[done]=false
RESPONSE
{success: true, task: {id: "someId", description: "some description", done: false}}

getTask

Returns the task with id == someId

GET /api/tasks/someId
RESPONSE
{success: true, task: {id: "someId", description: "some description", done: false}}