api-problem
v9.0.2
Published
HTTP Problem Utility
Downloads
11,232
Readme
API Problem
RFC 7807 - Problem Details for HTTP APIs
Install
npm install api-problem
API
Constructor: Problem(status[, title][, type][, members])
| name | type | required | default | description | referece |
|---------------|----------|----------|--------------------|----------------------------------------------------------------------------------------|------------------|
| status
| String
| ✔
| N/A
| The HTTP status code generated by the origin server for this occurrence of the problem | Section 3.1 |
| title
| String
| ✖
| HTTP status phrase | A short, human-readable summary of the problem type | Section 3.1 |
| type
| String
| ✖
| about:blank
| A URI reference that identifies the problem type | Section 3.1 |
| details
| Object
| ✖
| N/A
| additional details to attach to object | Section 3.1 |
import Problem from 'api-problem'
// HTTP defaults
new Problem(404)
//=> { status: '404', title: 'Not Found', type: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404' }
// override defaults
new Problem(404, 'Oops! Page Not Found')
//=> { status: '404', title: 'Oops! Page Not Found', type: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404' }
// custom values
new Problem(403, 'You do not have enough credit', 'https://example.com/probs/out-of-credit')
//=> { status: '403', title: 'You do not have enough credit', type: 'https://example.com/probs/out-of-credit' }
// additional details
new Problem(403, 'You do not have enough credit', 'https://example.com/probs/out-of-credit', {
detail: 'Your current balance is 30, but that costs 50.',
instance: '/account/12345/msgs/abc',
balance: 30,
accounts: ['/account/12345', '/account/67890']
})
//=> { status: '403', title: 'You do not have enough credit', type: 'https://example.com/probs/out-of-credit', detail: 'Your current balance is 30, but that costs 50.', instance: '/account/12345/msgs/abc', balance: 30, accounts: ['/account/12345', '/account/67890'] }
// HTTP defaults + Details
new Problem(403, {
detail: 'Account suspended',
instance: '/account/12345',
date: '2016-01-15T06:47:01.175Z',
account_id: '12345'
})
//=> { status: '403', title: 'Forbidden', type: 'https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/403', detail: 'Account suspended', instance: '/account/12345', account_id: 12345, 'date: 2016-01-15T06:47:01.175Z' }
Method : <object>
toObject()
returns an object containing all the properties including: (status, title, type, members)
const prob = new Problem(403, 'You do not have enough credit', 'https://example.com/probs/out-of-credit', { user_id: 'x123' })
prob.toObject() //=> { status: 403, title: 'You do not have enough credit', type: 'https://example.com/probs/out-of-credit', user_id: 'x123' }
Method : <string>
toString()
returns a simplified, human-readable string representation
const prob = new Problem(403, 'You do not have enough credit', 'https://example.com/probs/out-of-credit')
prob.toString() //=> [403] You do not have enough credit ('https://example.com/probs/out-of-credit')
Method : <void>
send(response)
uses response.writeHead
and response.end
to send an appropriate error response message with the Content-Type
response header to application/problem+json
import http from 'http'
import Problem from 'api-problem'
let response = new http.ServerResponse()
Problem.send(response)
Express Middleware
A standard connect middleware is provided. The middleware intercepts Problem objects thrown as exceptions and serializes them appropriately in the HTTP response while setting the Content-Type
response header to application/problem+json
import express from 'express'
import Problem from 'api-problem'
import Middleware from 'api-problem/lib/middleware'
const app = express()
app.get('/', (req, res) => {
throw new Problem(403)
})
app.use(Middleware)
Author: Ahmad Nassri • Twitter: @AhmadNassri