binder-protocol
v1.2.0
Published
API description for all Binder servers
Readme
binder-protocol
A declarative specification of the Binder API that ensures consistency between BinderModules and the client module
Used by binder-client to auto-generate the client and CLI interfaces
install
npm install binder-protocolusage
The protocol declaration is a single JS object, where each bottom-level key represents a Binder API endpoint and the value is a schema object. The endpoints currently defined are (see the API description for more detail):
- build
- start - start a build
- status - query the status of a single build
- statusAll - query the status of all builds
- registry
- fetch - get a single template
- fetchAll - get all registered templates
- deploy
- deploy - launch an instance of a template on the deploy backend
- status - get the status of a single deployment matching a template/id combo
- statusAll - get the status of all deployments for a given template
schema
Each endpoint is defined by the following properties:
pathstring - templated string describing the pathname and any request parametersparamsobject - keys for every request parameter and values describing that parameter's properties:typestring - request parameter typedescriptionstring - request parameter descriptionrequiredboolean - is this parameter required?descriptionstring - description of the endpointmsgstring - message that should be displayed when the endpoint request is sentrequestobject - keys for all properties of the HTTP requestmethodstring - HTTP methodauthorizedboolean - if the endpoint requires an API tokenbodyobject - HTTP post bodyresponseobject - contains a description of the possible response body and error/success handling infobodyobject - response body type descriptionerrorobject - names and handlers for all possible errors that the endpoint can generate (keyed by error name)statusnumber - HTTP response code for the errormsgstring - description of the error that occurredsuggestions[string] - possible fixes for the errorsuccessobject - handler for the single success outcome that the endpoint can generate
examples
Here's a simple example from the deploy API, but see index.js for many more examples.
deploy: {
...
statusAll: {
path: '/applications/{template-name}',
params: {
'template-name': {
type: String,
description: 'name of the template with existing deployments',
required: false
}
},
description: 'Get information associated with all deployment for a given template',
msg: 'Getting information about all deployments for {template-name}',
request: {
method: 'GET',
authorized: true
},
response: {
body: [{
id: String,
location: String
}],
error: {
badDatabase: {
status: 500,
msg: 'Querying the database for all deployments failed',
suggestions: [
'ensure that the database is accessible to the deploy server',
'check the Binder Logstash logs for database-oriented messages'
]
}
},
success: {
status: 200,
msg: '{results}'
}
}
}
}