Skip to content

Swagger / OpenAPI

mimi.js includes built-in Swagger UI at /api-docs. Annotate your routes with JSDoc comments — the spec is generated automatically.

Documenting Routes

Use JSDoc @ annotations above each route handler. The full syntax follows express-jsdoc-swagger.

GET with response

typescript
/**
 * GET /users
 * @summary List all users
 * @description Returns a paginated list of all users.
 * @return {object[]} 200 - Array of user objects
 * @return {object} 500 - Server error
 */
app.get('/users', (_req, res) => {
  res.json([]);
});

POST with request body

typescript
/**
 * POST /users
 * @summary Create a user
 * @param {object} request.body.required - User data
 * @param {string} request.body.required.name - User's full name
 * @param {string} request.body.required.email - User's email address
 * @return {object} 201 - Created user
 * @return {object} 400 - Validation error
 */
app.post('/users', (req, res) => {
  res.status(201).json(req.body);
});

Path parameters

typescript
/**
 * GET /users/{id}
 * @summary Get user by ID
 * @param {string} id.path.required - User ID
 * @return {object} 200 - User object
 * @return {object} 404 - User not found
 */
app.get('/users/:id', (req, res) => {
  res.json({ id: req.params.id });
});

With authentication

typescript
/**
 * DELETE /users/{id}
 * @summary Delete a user
 * @param {string} id.path.required - User ID
 * @security BearerAuth
 * @return {object} 204 - User deleted
 * @return {object} 401 - Unauthorized
 * @return {object} 404 - User not found
 */
app.delete('/users/:id', authMiddleware, (req, res) => {
  res.sendStatus(204);
});

With examples

typescript
/**
 * POST /login
 * @summary User login
 * @param {object} request.body.required - Credentials
 * @param {string} request.body.required.email - Email
 * @param {string} request.body.required.password - Password
 * @return {object} 200 - Login successful
 * @return {object} 401 - Invalid credentials
 * @example request - Example payload
 * {
 *   "email": "user@example.com",
 *   "password": "secret123"
 * }
 * @example response - 200 - Token response
 * {
 *   "token": "eyJhbGciOiJIUzI1NiJ9..."
 * }
 */
app.post('/login', async (req, res) => {
  // ...
});

Released under the ISC License.