跳至主要内容

REST

在构建 REST API 时,Prisma 客户端可以在你的路由控制器中使用,以发送数据库查询。

REST APIs with Prisma Client

支持的库

由于 Prisma 客户端“仅仅”负责将查询发送到你的数据库,因此它可以与你选择的任何 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 客户端 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 客户端实现 REST API,以及如何构建完整的应用程序。

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