Skip to content

Instantly share code, notes, and snippets.

@fadziljusri
Last active January 28, 2020 07:07
Show Gist options
  • Save fadziljusri/b2a1110c1281563e4b47201ba8d3d51c to your computer and use it in GitHub Desktop.
Save fadziljusri/b2a1110c1281563e4b47201ba8d3d51c to your computer and use it in GitHub Desktop.

Http Responses for RESTful API

Helpers/middlewares to formats API responses into stuctured and human-readable way (especially for frontend dev)

Available language (at the moment..)

Example in Express Node.js

const { Res200 } = require("./httpResponses")

// sending 200 response 
router.get("/", (req, res, next) => {
    ...
    let data = { something: "returned" };
    return Res200(
        res, 
        data, 
        "(Optional) Your response message or 200 default 'Ok'"
    );
});

// 200 response output
doFetchingSomething().then(res=>{
    /**
    'res.data' output
    {
        "status": "success",
        "message": "(Optional) Your response message or 200 default 'Ok'",
        "data": { something: "returned" }
    }
    */
})
# 2xx Success
def Res200(data={}, message="OK"):
return {
"status": "success",
"data": data,
"message": message
}, 200
def Res201(data={}, message="Created"):
return {
"status": "success",
"data": data,
"message": message
}, 201
def Res204(message="No Content"):
return {
"status": "success",
"data": None,
"message": message
}, 204
# 4xx Client Errors
status = {
308: "Permanent Redirect",
400: "Bad Request",
401: "Unauthorized",
403: "Forbidden",
404: "Not Found",
409: "Conflict",
}
def Abort(code, message=None, data=None):
return {
"statusText": status.get(code, "Error"),
"status": "failed",
"data": data,
"message": message
}, code
function Res200(res, data = {}, message = "Ok") {
res.status(200).json({ status: "success", data, message });
}
function Res201(res, data = {}, message = "Created") {
res.status(201).json({ status: "success", data, message });
}
function Res204(res, message = "No Content") {
res.status(204).json({ status: "success", data: null, message });
}
const errorStatus = {
308: "Permanent Redirect",
400: "Bad Request",
401: "Unauthorized",
403: "Forbidden",
404: "Not Found",
409: "Conflict"
}
function Abort(res, code, message = null, data = null) {
let statusText = errorStatus[code] || "Error";
res.status(code).json({ status: "failed", statusText, data, message })
}
module.exports = {
Res200,
Res201,
Res204,
Abort
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment