使用 Prisma + GraphQL 构建强大而高效的 API:从 0 到 1 的详细指南
2023-12-28 08:19:41
简介
Prisma 是一个强大的工具,可以帮助您轻松地与数据库进行交互。它提供了一个统一的 API,允许您使用不同的数据库系统,如 PostgreSQL、MySQL 和 SQLite。GraphQL 是一个查询语言,允许您以声明的方式从服务器请求数据。TypeGraphQL 和 Prisma-TypeGraphQL 是两个库,可以帮助您轻松地将 GraphQL 与 TypeScript 或 JavaScript 集成。
项目设置
首先,我们需要创建一个新的 Node.js 项目。您可以使用以下命令:
npx create-next-app@latest my-app
然后,我们需要安装 Prisma 和相关的库。您可以使用以下命令:
npm install prisma graphql typegraphql prisma-typegraphql
定义数据模型
接下来,我们需要定义我们的数据模型。我们将创建一个名为 Post
的简单模型,它具有 id
、title
和 content
字段。您可以使用以下命令来创建数据模型:
npx prisma generate
这将在您的项目中创建一个名为 schema.prisma
的文件。您可以使用此文件来定义您的数据模型。对于我们的 Post
模型,我们可以使用以下代码:
model Post {
id Int @id @default(autoincrement())
title String
content String?
}
生成数据库模式
现在我们需要生成数据库模式。您可以使用以下命令:
npx prisma migrate dev
这将在您的数据库中创建一个名为 Post
的表。
创建 GraphQL API
现在我们可以创建我们的 GraphQL API。首先,我们需要创建一个名为 schema.graphql
的文件。您可以使用以下代码:
type Query {
posts: [Post!]!
post(id: Int!): Post!
}
type Mutation {
createPost(title: String!, content: String): Post!
updatePost(id: Int!, title: String, content: String): Post!
deletePost(id: Int!): Post!
}
这是一个简单的 GraphQL 模式,它定义了我们的 Post
模型的查询和突变。
连接 Prisma 和 GraphQL
现在我们需要将 Prisma 和 GraphQL 连接起来。我们可以使用 TypeGraphQL 和 Prisma-TypeGraphQL 来做到这一点。首先,我们需要在我们的 server.js
文件中导入这些库。您可以使用以下代码:
import { ApolloServer, gql } from 'apollo-server';
import { PrismaClient } from '@prisma/client';
import { buildSchema } from 'type-graphql';
接下来,我们需要创建一个 Prisma 客户端。您可以使用以下代码:
const prisma = new PrismaClient();
现在我们可以创建一个 Apollo 服务器。我们可以使用以下代码:
const server = new ApolloServer({
schema: await buildSchema({
resolvers: [],
emitSchemaFile: true,
}),
context: {
prisma,
},
});
启动服务器
现在我们可以启动我们的服务器。我们可以使用以下命令:
node server.js
测试 API
现在我们可以使用 GraphQL Playground 来测试我们的 API。您可以使用以下命令来启动 GraphQL Playground:
npx apollo studio
然后,您可以在 GraphQL Playground 中运行查询和突变。例如,您可以使用以下查询来获取所有帖子:
query {
posts {
id
title
content
}
}
结论
在本教程中,我们学习了如何使用 Prisma 和 GraphQL 从头开始构建一个简单的 CRUD API。我们使用 TypeGraphQL 和 Prisma-TypeGraphQL 来简化开发过程。您可以在本教程的基础上继续构建更复杂的 API。