next-api-builder
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

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) => {
    // Insert data into some DB...
    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 it
  • validateQuery - 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) => {
    // Insert data into some DB...
    return data || { id: 0, title: 'Sample record' };
  },
  { validateBody: schema }, // Use 'validateBody' or 'validateQuery' with a Zod schema object
);

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.

Package Sidebar

Install

npm i next-api-builder

Weekly Downloads

3

Version

1.0.1

License

BSD-3-Clause

Unpacked Size

67.2 kB

Total Files

10

Last publish

Collaborators

  • vlucas