跳至主要内容

REST

在构建 REST API 时,可以在您的路由控制器中使用 Prisma Client 来发送数据库查询。

REST APIs with Prisma Client

支持的库

由于 Prisma Client “仅”负责将查询发送到您的数据库,因此它可以与您选择的任何 HTTP 服务器库或 Web 框架结合使用。

以下列出了您可以与 Prisma ORM 一起使用的库和框架(非详尽列表)

REST API 服务器示例

假设您有一个类似于以下内容的 Prisma 模式

datasource db {
provider = "sqlite"
url = "file:./dev.db"
}

generator client {
provider = "prisma-client-js"
}

model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}

model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}

您现在可以实现路由控制器(例如,使用 Express),当传入 HTTP 请求到达时,该控制器使用生成的Prisma Client API执行数据库操作。此页面仅显示了一些示例代码片段;如果您想运行这些代码片段,可以使用REST API 示例

GET

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

请注意,在这种情况下,feed 端点返回 Post 对象的嵌套 JSON 响应,其中包含一个 author 对象。这是一个示例响应

[
{
"id": "21",
"title": "Hello World",
"content": "null",
"published": "true",
"authorId": 42,
"author": {
"id": "42",
"name": "Alice",
"email": "[email protected]"
}
}
]

POST

app.post(`/post`, async (req, res) => {
const { title, content, authorEmail } = req.body
const result = await prisma.post.create({
data: {
title,
content,
published: false,
author: { connect: { email: authorEmail } },
},
})
res.json(result)
})

PUT

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

DELETE

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

可运行的示例项目

您可以在prisma-examples存储库中找到一些可运行的示例,这些示例展示了如何使用 Prisma Client 实现 REST API,以及如何构建完整的应用程序。

示例技术栈描述
rest-express仅后端使用 TypeScript 的 REST API 与 Express
rest-fastify仅后端使用 Fastify 和 Prisma Client 的 REST API。
rest-hapi仅后端使用 hapi 和 Prisma Client 的 REST API
rest-nestjs仅后端带有 REST API 的 Nest.js 应用程序(Express)
rest-nextjs-express全栈Next.js 应用程序(React、Express)和 Prisma Client
rest-nextjs-api-routes全栈带有 REST API 的 Next.js 应用程序(React)
rest-nextjs-api-routes-auth全栈使用 NextAuth.js 实现身份验证