Next.js API Builder
An easy way to build API routes in Next.js with the right defaults.
Features:
- Fully typed with TypeScript
- Built-in schema validation with Zod
- Automatic
400: Bad Request
response when a Zod schema is supplied and the input data fails validation - Automatic
OPTIONS
response based on defined HTTP methods - Automatic
HEAD
response based on your defined GET
handler - Automatic
405: Method Not Found
response for requests to methods not handled
Installation
Install with NPM:
npm i next-api-builder
Or with Yarn:
yarn add next-api-builder
Usage
import { apiRoute } from 'next-api-builder';
import type { NextApiRequest, NextApiResponse } from 'next/types';
export default apiRoute()
.get(async (req: NextApiRequest, res: NextApiResponse) => {
return { foo: 'bar!' };
})
.post(async (req: NextApiRequest, res: NextApiResponse) => {
return req.body || { id: 0, title: 'Sample record' };
});
Using Zod.js for Runtime Validation
Next API builder uses Zod for runtime validation of a request body and/or query
string parameters.
You can use a second optional object literal parameter when defining routes to supply a Zod schema.
validateBody
- Parse the body as an object (from JSON, etc.) and run validations on itvalidateQuery
- Parse the query string and run validations on it
import { apiRoute } from 'next-api-builder';
import type { NextApiRequest, NextApiResponse } from 'next/types';
const schema = z.object({
name: z.string(),
email: z.string().email(),
});
type TSchema = z.infer<typeof schema>;
export default apiRoute().post(
async (req: NextApiRequest, res: NextApiResponse, data: TSchema) => {
return data || { id: 0, title: 'Sample record' };
},
{ validateBody: schema },
);
If the incoming HTTP Request fails validation, a 400: Bad Request
will be returned to the user with the field level
errors and messages returned from Zod, formatted to JSON.