instant-api
v1.0.5
Published
Like instant soup but API. JSON-RPC2 flavor with Websockets and HTTP.
Downloads
6
Keywords
Readme
Instant API
Like instant soup but API. JSON-RPC2 flavor with Websockets and HTTP.
💾 Install
npm i -s instant-api
📡 Expose task 'makeSoup' at port 3000
var tasks = {
'makeSoup': require('./tasks/make-soup')
}
require('instant-api')(tasks ,{ port: process.env.PORT || 3000 })
🤖 tasks/make-soup.js
module.exports = function (rpc) {
// use parameters
console.log(rpc.params)
// return result
rpc.sendResult('Done. Enjoy!')
// return param error
//rpc.sendParamsError('Missing parameter ...')
// return custom error
//rpc.sendError('Splash')
// use in promise chains
// rawQuery(query).then(rpc.sendResult).catch(rpc.sendError)
}
📣 Call task...
var message = {
method: 'makeSoup',
params: { size: 'medium' },
jsonrpc: '2.0',
id: Math.round(Math.random()*1e20)
}
// ... from a browser using HTTP
fetch('http://localhost:3000', {
method: 'POST', body: JSON.stringify( message )
}).then(function(response){
return response.json()
}).then(function(body){
console.log(body.result)
}).catch(console.error)
// ... from a browser using Websockets
var ws = new WebSocket('ws://localhost:3000')
ws.onopen = function () {
ws.send( JSON.stringify(message) )
}
ws.onmessage = function (event) {
console.log(JSON.parse(event.data))
}
// ... from another server
// npm install --save request
require('request').post({
url: 'http://localhost:3000',
json: message
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body.result)
} else {
console.error(error || body)
}
})
By default, CORS is enabled but does not permit transmitting credentials. You can specify allowed CORS domains which will also be able to send credentials:
var tasks = {
'makeSoup': require('./tasks/make-soup')
}
require('instant-api')(tasks ,{
port: process.env.PORT || 3000,
corsAllowedDomains: [ 'example.org', 'test.example.org' ]
})
npm run example