跳到主要内容

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 Schema(类型定义 + 解析器)
  • HTTP 服务器

请注意,GraphQL Schema 可以采用代码优先(code-first)或 SDL 优先(SDL-first)的方式编写。查看这篇文章,了解这两种方法的更多信息。如果您喜欢 SDL 优先的方法但仍希望代码类型安全,请查看 GraphQL Code Generator 以基于 SDL 生成各种类型定义。

GraphQL Schema 和 HTTP 服务器通常由不同的库处理。以下是当前 GraphQL 服务器工具及其用途的概述

库(npm 包)用途兼容 Prisma ORMPrisma 集成
graphqlGraphQL schema(代码优先)
graphql-toolsGraphQL schema(SDL 优先)
type-graphqlGraphQL schema(代码优先)typegraphql-prisma
nexusGraphQL schema(代码优先)nexus-prisma 早期预览
apollo-serverHTTP 服务器不适用
express-graphqlHTTP 服务器不适用
fastify-gqlHTTP 服务器不适用
graphql-yogaHTTP 服务器不适用

除了这些独立的、单一用途的库之外,还有一些项目正在构建集成的应用框架

框架技术栈构建者Prisma ORM描述
Redwood.js全栈Tom Preston-Werner基于 Prisma ORM 构建将全栈带入 JAMstack。

注意:如果您发现列表中缺少任何 GraphQL 库/框架,请告知我们。

Prisma ORM 与 GraphQL 示例

在以下部分中,您将找到几个可直接运行的示例,展示如何将 Prisma ORM 与上表中提到的不同工具组合使用。

示例HTTP 服务器GraphQL schema描述
GraphQL API (Pothos)graphql-yogapothos基于 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/servernexus基于 @apollo/server 的 GraphQL 服务器
GraphQL API (TypeGraphQL)apollo-servertype-graphql基于 TypeGraphQL 的代码优先方法的 GraphQL 服务器
GraphQL API(认证)apollo-servernexus支持邮箱密码认证和权限的 GraphQL 服务器
全栈应用graphql-yogapothos使用 Next.js (React)、Apollo Client、GraphQL Yoga 和 Pothos 的全栈应用
GraphQL 订阅apollo-servernexus实现实时 GraphQL 订阅的 GraphQL 服务器
GraphQL API -- Hapiapollo-server-hapinexus基于 Hapi 的 GraphQL 服务器
GraphQL API -- Hapi(SDL 优先)apollo-server-hapigraphql-tools基于 Hapi 的 GraphQL 服务器
GraphQL API -- Fastifyfastifymercurius不适用基于 FastifyMercurius 的 GraphQL 服务器
GraphQL API -- Fastify(SDL 优先)fastifyNexus基于 FastifyMercurius 的 GraphQL 服务器

常见问题

Prisma ORM 在 GraphQL 服务器中扮演什么角色?

无论您使用上述哪种 GraphQL 工具/库,Prisma ORM 都用于您的 GraphQL 解析器内部,以连接到数据库。它扮演着与任何其他 ORM 或 SQL 查询构建器在您的解析器中相同的角色。

在 GraphQL 查询的解析器中,Prisma ORM 通常从数据库读取数据并在 GraphQL 响应中返回。在 GraphQL 变更的解析器中,Prisma ORM 通常也会向数据库写入数据(例如创建新记录或更新现有记录)。

其他 GraphQL 资源

Prisma 负责策划 GraphQL Weekly,一份突出 GraphQL 社区资源和更新的通讯。订阅以了解最新的 GraphQL 文章、视频、教程、库等信息。

© . All rights reserved.