API patterns

How to use Prisma ORM with REST APIs, GraphQL servers, and fullstack frameworks

Prisma Client can be used to query your database from any server-side JavaScript or TypeScript application. This page covers common patterns for REST APIs, GraphQL servers, and fullstack frameworks.

REST APIs

When building REST APIs, use Prisma Client inside your route controllers to execute database queries.

Supported frameworks

Example routes

// GET /feed - fetch published posts
app.get("/feed", async (req, res) => {
  const posts = await prisma.post.findMany({
    where: { published: true },
    include: { author: true },
  });
  res.json(posts);
});

// POST /post - create a post
app.post("/post", async (req, res) => {
  const { title, content, authorEmail } = req.body;
  const result = await prisma.post.create({
    data: {
      title,
      content,
      author: { connect: { email: authorEmail } },
    },
  });
  res.json(result);
});

// PUT /publish/:id - publish a post
app.put("/publish/:id", async (req, res) => {
  const post = await prisma.post.update({
    where: { id: Number(req.params.id) },
    data: { published: true },
  });
  res.json(post);
});

// DELETE /post/:id - delete a post
app.delete("/post/:id", async (req, res) => {
  const post = await prisma.post.delete({
    where: { id: Number(req.params.id) },
  });
  res.json(post);
});

GraphQL

Prisma ORM works with any GraphQL library. Use Prisma Client inside your resolvers to read and write data.

Supported tools

LibraryPurpose
graphql-yogaHTTP server
apollo-serverHTTP server
pothosSchema builder
nexusSchema builder
type-graphqlSchema builder

Framework integrations

Prisma's role

Prisma ORM is used inside GraphQL resolvers the same way you'd use any other ORM:

  • Queries: Read data from the database to return in the response
  • Mutations: Write data to the database (create, update, delete)

Fullstack frameworks

Modern fullstack frameworks blur server/client boundaries. Use Prisma Client in the server-side portion of your application.

Supported frameworks

Supported runtimes

Next.js example

// In getServerSideProps or API routes
export const getServerSideProps = async () => {
  const feed = await prisma.post.findMany({
    where: { published: true },
  });
  return { props: { feed } };
};

Example projects

Find ready-to-run examples in the prisma-examples repository:

ExampleTypeDescription
Next.jsFullstackNext.js 15 app
ExpressRESTExpress REST API
FastifyRESTFastify REST API
GraphQL YogaGraphQLGraphQL server with Pothos
NestJSRESTNestJS REST API
RemixFullstackRemix with actions and loaders
SvelteKitFullstackSvelteKit app

On this page