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 ORM | Prisma 整合 |
|---|---|---|---|
graphql | GraphQL schema(程式碼優先) | 是 | 否 |
graphql-tools | GraphQL schema(SDL 優先) | 是 | 否 |
type-graphql | GraphQL schema(程式碼優先) | 是 | typegraphql-prisma |
nexus | GraphQL schema(程式碼優先) | 是 | 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 schema | 描述 |
|---|---|---|---|
| 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 文章、影片、教程、庫等資訊。