Skip to content

mvcewicz/quick-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

7 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

@mvcwcz/quick-api


Works only with Next.js 13+, with experimental API routes enabled.

Designed to be a quick and easy way to create a REST API for your Next.js project with zero setup.

This package is not a replacement for Next.js API routes, it's just a wrapper around them.

Highly inspired by tRPC, if you need more advanced features, check it out.

WARNING: This package is still in development and it's API might change in the future.

Installation

npm install @mvcwcz/quick-api
# or
yarn add @mvcwcz/quick-api
# or
pnpm add @mvcwcz/quick-api

Features

  • Zero setup
  • Schema based endpoint
  • Middlewares
  • Error handlers

Documentation

Quick start

import { QuickApi } from "@mvcwcz/quick-api";

export const qApi = QuickApi();

Basic usage

Simple endpoint that will return "Hello world"

import { QuickApi } from "@mvcwcz/quick-api";

export const qApi = QuickApi();

export const GET = qApi.endpoint({
  callback: () => new Response("Hello world"),
});

Schema based endpoint

Endpoint that will validate input and output

import { QuickApi } from "@mvcwcz/quick-api";

export const qApi = QuickApi();

export const GET = qApi.endpoint({
  input: z.object({
    query: z.object({
      id: z.string(),
    }),
  }),
  output: z.object({
    id: z.string(),
    email: z.string(),
  }),
  callback: ({ input }) => {
    return {
      id: input.id,
      name: "some name",
    };
  },
});

Middlewares

Simple middleware that will add prisma to the context

import { QuickApi, middleware } from "@mvcwcz/quick-api";

export const qApi = QuickApi();

const sessionMiddleware = middleware((req) => {
  const session = null;
  return {
    session,
  };
});

export const GET = qApi.endpoint({
  middlewares: [sessionMiddleware],
  callback: async ({ input, ctx }) => {
    const session = ctx.session;

    if (!session) {
      throw new Error("Session not found");
    }

    return new Response("OK");
  },
});

Error handlers

Although it's zero setup, you can still customize error handling

import { QuickApi, EndpointControllerConfig } from "@mvcwcz/quick-api";

const controllerConfig: EndpointControllerConfig = {
  onSchemaError: (error) => {
    return new Response(error.message, {
      status: 400,
    });
  },
  onCallbackError: (error) => {
    return new Response(error.message, {
      status: 500,
    });
  },
};

export const qApi = QuickApi(controllerConfig);

Why

I wanted to create a simple way to create REST API endpoints for my Next.js projects without having to setup a whole framework. I also wanted to have a way to validate input and output of the endpoints.

About

Do it quickly ๐Ÿš€

Resources

Stars

Watchers

Forks

Packages

No packages published