在我們上一篇文章中,我們概述了 SDL 優先的 GraphQL 伺服器開發的問題。本週,我們很高興宣布 GraphQL Nexus,一個程式優先的 GraphQL 函式庫。這是 Tim Griesser 的客座文章。

重點回顧:SDL 優先開發的問題
如前一篇文章所述,SDL 優先的 GraphQL 伺服器開發存在許多挑戰,例如保持 SDL 和解析器同步、模組化您的 GraphQL schema 以及實現出色的 IDE 支援。大多數問題可以解決,但僅需學習、使用和整合大量額外工具才能實現。
今天,我們將介紹一個函式庫,該函式庫實作了 GraphQL 伺服器開發的程式優先方法:GraphQL Nexus。
GraphQL Nexus 簡介
兩全其美:Schema-first 和 code-first
在上一篇文章中,我們了解了建構 GraphQL 伺服器的 schema-first、SDL-first 和 code-first 方法
- Schema-first:預先的 schema 設計是開發過程中至關重要的一部分
- SDL-first:GraphQL schema 的 SDL 版本是 API 的事實來源
- Code-first:GraphQL schema 是以程式方式建構的
GraphQL Nexus 雖然是程式優先的框架,但仍然可以用於 schema-first 開發。Schema-first 和 code-first 並非相互對立的方法:當它們結合在一起時,會變得更加有用。
使用 Nexus,GraphQL schema 是以程式方式定義和實作的。因此,它遵循其他語言中 GraphQL 伺服器的成熟方法,例如 sangria-graphql
(Scala)、graphlq-ruby
或 graphene
(Python)。
型別安全、與 GraphQL 生態系統相容且資料不可知
GraphQL Nexus 的設計考慮了 TypeScript/JavaScript 的智能感知。它結合了 TypeScript 泛型、條件型別和型別合併,以提供完整的自動生成型別覆蓋率。Nexus 的核心設計目標是以盡可能少的手動型別註解來獲得最佳的型別覆蓋率。

Nexus 建立在 graphql-js
的基礎之上,這使其與目前的 GraphQL 生態系統高度相容。
使用 Nexus 定義和實作 GraphQL schema
Nexus 的 API 公開了許多函式,可讓您定義和實作 GraphQL schema 的建構區塊,例如 物件型別、聯集和 介面、列舉以及您在 GraphQL 的型別系統中找到的所有其他內容
Query
和 Mutation
型別是 GraphQL schema 中所謂的根型別。Nexus 提供了一個簡寫 API 來定義這些型別
一旦您為 GraphQL schema 定義了所有型別,您就可以使用 makeSchema
函式來建立一個 GraphQLSchema
實例,該實例將成為您的 GraphQL 伺服器的基礎(例如 graphql-yoga
或 apollo-server
)
makeSchema
還允許您提供 prettier 設定,以便產生的程式碼符合您的樣式指南 💅
GraphQL Nexus 入門
開始使用 Nexus 最快的方式是瀏覽官方範例或使用線上Playground。
1) 安裝
由於 GraphQL Nexus 非常依賴 graphql-js
,因此在安裝時需要將其作為peer dependency
2) 設定與最佳實務
文件中的最佳實務章節包含許多關於理想編輯器設定和 Nexus 專案結構提示的說明。
由於 GraphQL Nexus 即時產生型別,因此最佳的開發人員體驗是透過在您編寫程式碼時在背景執行的開發伺服器實現的。每當您儲存檔案時,它都會負責更新產生的型別。
3) 使用 graphql-yoga
的「Hello World」
完成編輯器設定後,您就可以開始建構您的 GraphQL schema。以下是使用 graphql-yoga
的「Hello World」應用程式的外觀
4) 從您的 SDL 優先 API 遷移
SDL 轉換器可讓您提供 SDL schema 定義並輸出相應的 Nexus 程式碼(不包含任何解析器)
力求提供出色的開發人員體驗
Nexus API 的設計特別注重開發人員體驗。一些核心設計目標是
- 預設型別安全
- 可讀性
- 開發人員人體工學
- 輕鬆與 Prettier 整合
在您建構 API 時執行的開發伺服器可確保您始終獲得自動完成和錯誤檢查,以檢查您剛引入的 schema 變更。
透過 GraphQL Playground 中新的schema 輪詢功能,當您調整 schema 時,您的 GraphQL API 也會立即重新載入。
讓我們知道您的想法
我們對 GraphQL Nexus 感到非常興奮,並希望您也會如此。歡迎瀏覽官方範例或依照文件中「入門」說明來試用 Nexus。
如果您遇到任何問題,請開啟 GitHub issue 或在我們的 Slack 中聯繫我們。
不要錯過下一篇文章!
訂閱 Prisma 電子報