返回

使用 Prisma + GraphQL 构建强大而高效的 API:从 0 到 1 的详细指南

前端

简介

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 的简单模型,它具有 idtitlecontent 字段。您可以使用以下命令来创建数据模型:

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。