GraphQL
GraphQL 是一种用于 API 的查询语言。它通常用作 RESTful API 的替代方案,但也可以用作现有 RESTful 服务之上的附加“网关”层。
使用 Prisma ORM,您可以构建连接到数据库的 GraphQL 服务器。Prisma ORM 完全不依赖于您使用的 GraphQL 工具。构建 GraphQL 服务器时,您可以将 Prisma ORM 与 Apollo Server、GraphQL Yoga、TypeGraphQL、GraphQL.js 等工具结合使用,或者几乎任何您在 GraphQL 服务器设置中使用的工具或库。
GraphQL 服务器的底层原理
GraphQL 服务器由两个主要组件组成
- GraphQL 模式(类型定义 + 解析器)
- HTTP 服务器
请注意,GraphQL 模式可以以代码优先或 SDL 优先的方式编写。请查看这篇文章以了解有关这两种方法的更多信息。如果您喜欢 SDL 优先的方法,但仍希望使您的代码类型安全,请查看 GraphQL 代码生成器以基于 SDL 生成各种类型定义。
GraphQL 模式和 HTTP 服务器通常由单独的库处理。以下是当前 GraphQL 服务器工具及其用途的概述
库 (npm 包) | 用途 | 与 Prisma ORM 兼容 | Prisma 集成 |
---|---|---|---|
graphql | GraphQL 模式(代码优先) | 是 | 否 |
graphql-tools | GraphQL 模式 (SDL 优先) | 是 | 否 |
type-graphql | GraphQL 模式(代码优先) | 是 | typegraphql-prisma |
nexus | GraphQL 模式(代码优先) | 是 | nexus-prisma 早期预览 |
apollo-server | HTTP 服务器 | 是 | 不适用 |
express-graphql | HTTP 服务器 | 是 | 不适用 |
fastify-gql | HTTP 服务器 | 是 | 不适用 |
graphql-yoga | HTTP 服务器 | 是 | 不适用 |
除了这些独立的和单一用途的库之外,还有几个项目正在构建集成的应用程序框架
框架 | 技术栈 | 构建者 | Prisma ORM | 描述 |
---|---|---|---|---|
Redwood.js | 全栈 | Tom Preston-Werner | 构建于 Prisma ORM 之上 | 将全栈引入 JAMstack。 |
注意:如果您发现列表中缺少任何 GraphQL 库/框架,请告知我们。
Prisma ORM 和 GraphQL 示例
在以下部分中,您将找到几个可以运行的示例,展示如何将 Prisma ORM 与上表中提到的工具的不同组合一起使用。
示例 | HTTP 服务器 | GraphQL 模式 | 描述 |
---|---|---|---|
GraphQL API (Pothos) | graphql-yoga | pothos | 基于 graphql-yoga 的 GraphQL 服务器 |
GraphQL API (SDL 优先) | graphql-yoga | 不适用 | 基于 SDL 优先方法的 GraphQL 服务器 |
GraphQL API -- NestJs | @nestjs/apollo | 不适用 | 基于 NestJS 的 GraphQL 服务器 |
GraphQL API -- NestJs (SDL 优先) | @nestjs/apollo | 不适用 | 基于 NestJS 的 GraphQL 服务器 |
GraphQL API (Nexus) | @apollo/server | nexus | 基于 @apollo/server 的 GraphQL 服务器 |
GraphQL API (TypeGraphQL) | apollo-server | type-graphql | 基于 TypeGraphQL 代码优先方法的 GraphQL 服务器 |
GraphQL API (身份验证) | apollo-server | nexus | 具有电子邮件-密码身份验证和权限的 GraphQL 服务器 |
全栈应用程序 | graphql-yoga | pothos | 具有 Next.js (React)、Apollo Client、GraphQL Yoga 和 Pothos 的全栈应用程序 |
GraphQL 订阅 | apollo-server | nexus | 实现实时 GraphQL 订阅的 GraphQL 服务器 |
GraphQL API -- Hapi | apollo-server-hapi | nexus | 基于 Hapi 的 GraphQL 服务器 |
GraphQL API -- Hapi (SDL 优先) | apollo-server-hapi | graphql-tools | 基于 Hapi 的 GraphQL 服务器 |
GraphQL API -- Fastify | fastify 和 mercurius | 不适用 | 基于 Fastify 和 Mercurius 的 GraphQL 服务器 |
GraphQL API -- Fastify (SDL 优先) | fastify | Nexus | 基于 Fastify 和 Mercurius 的 GraphQL 服务器 |
常见问题解答
Prisma ORM 在 GraphQL 服务器中的作用是什么?
无论您使用上述哪种 GraphQL 工具/库,Prisma ORM 都在您的 GraphQL 解析器内部使用,以连接到您的数据库。它在您的解析器内部具有与其他任何 ORM 或 SQL 查询构建器相同的角色。
在 GraphQL 查询的解析器中,Prisma ORM 通常从数据库中读取数据以在 GraphQL 响应中返回。在 GraphQL 突变的解析器中,Prisma ORM 通常还会将数据写入数据库(例如,创建新的或更新现有的记录)。
其他 GraphQL 资源
Prisma 管理 GraphQL Weekly,这是一份新闻通讯,重点介绍 GraphQL 社区的资源和更新。订阅以随时了解 GraphQL 文章、视频、教程、库等。