0.0.1 • Published 7 years ago
json-messages v0.0.1
Standard JSON Messages
A little wrapper library to standardize messages returned from JSON api's. It is intended to standardize application level messaging for things like errors, success messages and other application level signaling. This format is a superset of the JSON-API spec for error messages but adds on a few things so extend it to other message types.
The Format
_messageswill is an array of objects at the top level of the response- Each entry in the
_messagesarray will have these properties:- Required fields:
code: A application unique camel case stringdetail: A human readable and translatable string to display to the end userlevel: A severity description;error,warningorsuccess
- Optional fields:
id: A unique id for this message instancestatus: The status code which should be returned with this messagetitle: A title for the messagemeta: An object with extra context for the messagesource: An object with context for the source of the message, like error stack trace or the related fieldlinks: An object with links to related context, like a page describing the error
- Required fields:
Examples
{
"_messages": [{
"code": "resourceNotFound",
"detail": "These are not the resources you are looking for."
"level": "error"
}]
}{
"_messages": [{
"code": "invalidInput",
"detail": "The input you provided is invalid"
"level": "error",
"source": {
"field": "input"
}
}]
}{
"_messages": [{
"code": "duplicateKetInsert",
"detail": "Duplicate key"
"level": "error",
"title": "Database insert error"
"status": "500",
"meta": {
"key": 123
}
}]
}Usage
$ npm install --save json-messagesconst http = require('http')
const messages = require('messages')
const server = http.createServer((req, res) => {
res.setHeader('Content-Type', 'application/json')
// Send an error response
if (req.url !== '/hello') {
res.statusCode = 404
res.end(JSON.stringify({
_messages: messages({
code: 'notFound',
message: 'Not found: ' + req.url,
level: messages.levels.ERROR,
status: 404,
source: {
field: 'url'
},
meta: {
url: req.url
}
})
}))
return
}
// Send a success message
res.end(JSON.stringify({
_messages: messages({
code: 'helloWorld',
message: 'Hello World',
level: messages.levels.SUCCESS
})
}))
})
server.listen(0)- I18n: The
messagefield is human readable and can be translated based on thecodeas a key. - Debugging: In production,
codefield can be used to track down errors. In deverrorlevels include a stack. - Message Metadata: Standardized way to include metadata without mucking with the message guarantees.
- Browser compatible: Helpful to keep your API's and clients speaking the same language.
0.0.1
7 years ago