cozyapi
v1.1.1
Published
CozyAPI: Simplify Your HTTP Server with Decorators.
Downloads
4
Readme
CozyAPI: Simplify Your HTTP Server
- 💜 Simplify Your Api Servers
- 💜 Use Decorators (currently using Babel)
- 💜 Generated OpenAPI.json for easy Swagger Setup
A https://hub.codehubby.com package to radically simplify your HTTP API setup using decorators.
app.js:
import CozyApi from 'cozyapi'
const app = new CozyApi()
class MyApi {
@app.get('/')
async hello() {
return {message: "Hello world! 🙏🏻🙌"}
}
@app.post('/')
async postMeSomething(postData) {
return {postData}
}
@app.post('/items/{item_id}')
async postMeSomeItem(item_id, postData) {
return {item_id, postData}
}
}
Enabling Decorators in Pure JavaScript (2023-05)
You need a .babelrc file with the following contents:
{
"presets": [
["@babel/env", {
"targets": {
"node": "current"
}
}]
],
"plugins": [
["@babel/plugin-proposal-decorators", { version: "2023-01" }],
"@babel/plugin-proposal-class-static-block",
"@babel/plugin-proposal-class-properties",
"@babel/plugin-proposal-object-rest-spread",
]
}
As well as a build script in your package.json and babel packages and run npm install after you updated your package.json file:
"scripts": {
"build": "babel *.js -d dist",
"build-scripts": "babel ./scripts/*.js -d dist/scripts # (optional for custom /scripts folder)",
"start": "npm run build && node dist/app.js"
},
"devDependencies": {
"@babel/cli": "^7.21.5",
"@babel/core": "^7.21.8",
"@babel/plugin-proposal-class-static-block": "^7.21.0",
"@babel/plugin-proposal-decorators": "^7.21.0",
"@babel/plugin-syntax-top-level-await": "^7.14.5",
"@babel/preset-env": "^7.21.5"
}
Don't forget to run npm install after editing your package.json ;)!
OpenAPI + Swagger API
CozyApi automately generated an openapi.json file which you can use in a swagger api configuration such as this:
app.js:
import express from 'express';
import bodyParser from 'body-parser';
import swaggerUi from 'swagger-ui-express';
import fs from 'fs';
const app = express();
const port = 3000;
// Parse JSON bodies
app.use(bodyParser.json());
// Read the OpenAPI JSON file
const openapiDocument = JSON.parse(fs.readFileSync('./openapi.json', 'utf8'));
// Configure Swagger UI with dark layout
const swaggerUiOptions = {
customCss: '.swagger-ui .topbar { background-color: #333; } body,.swagger-ui { background:#999;color:grey; }',
customSiteTitle: 'My API Documentation',
};
// Serve Swagger UI at root endpoint
app.use('/', swaggerUi.serve, swaggerUi.setup(openapiDocument, swaggerUiOptions));
// Start the server
app.listen(port, () => {
console.log(`Swagger UI server listening at http://localhost:${port}`);
});
.