omapi
v0.0.1
Published
Implementation of the OpenMergeAPI specifications. Merge and share OpenAPI endpoints and schemas.
Maintainers
Readme
omapi
Implementation of the OpenMergeAPI specs, omapi (said "Oh Map-ee!") is a command line and Node.js utility for building and merging OpenAPI endpoints and schemas.
Introduction
Let's discover omapi in less than 5 minutes.
You'll need Node.js version 20.0 or above.
Initialize the Project
Create a new directory and initialize npm:
mkdir my-api
cd my-api
npm init -yInstall dependencies:
npm install --save-dev omapi @omapi/generator-routesomapi- The core CLI (this library).@omapi/generator-routes- This plugin generates output for common routers.
Create your API
Add an API endpoint for GET /hello by adding the file api/paths/hello/[email protected] with this:
export const summary = 'Says Hello'
export const description = 'Simple example using the NodeJS http request/response model.'
export default async (request, response) => {
response.statusCode = 200
response.setHeader('Content-Type', 'text/plain')
response.end('Hello World!')
}Configure
Add a configuration file omapi.config.js with this:
import routes from '@omapi/generator-routes'
export default {
input: './api',
output: './build',
generators: [
routes(),
],
}And to your package.json file, add a run script for building:
{
"scripts": {
"build": "omapi -c"
}
}Now build by running the following command in your terminal:
npm run buildRun the Server
OpenMergeAPI does not have opinions about how you handle requests, and neither does omapi, but in this demo we're using a simple implementation of Node.js createServer.
Add a file server.js and put in it:
import { createServer } from 'node:http'
import { routes } from './build/routes.js'
const server = createServer((request, response) => {
// a very rudimentary router, as omapi does not include a default
for (const { path, method, handler } of routes) {
if (request.url === path && request.method.toLowerCase() === method) {
return handler(request, response)
}
}
})
server.listen(3000, '127.0.0.1', () => {
console.log('Server running!')
})Then start the server by running this command from your terminal:
node ./server.jsNow make a request to 127.0.0.1:3000/hello to see the server response:
> curl http://127.0.0.1:3000/hello
Hello World!License
This software and all example code are dedicated to the public domain.
