2019年2月7日

介紹 GraphQL Nexus:程式碼優先的 GraphQL 伺服器開發

在我們上一篇文章中,我們概述了 SDL 優先的 GraphQL 伺服器開發所面臨的問題。本週,我們很高興地宣佈推出 GraphQL Nexus,一個程式碼優先的 GraphQL 庫。由 蒂姆·格里瑟 撰寫的客座文章。

Introducing GraphQL Nexus
 
“Schema 優先” GraphQL 伺服器開發的問題
 
(正在閱讀)
介紹 GraphQL Nexus:程式碼優先的 GraphQL 伺服器開發
 
將 GraphQL Nexus 與資料庫結合使用

回顧:SDL 優先開發的問題

正如上一篇文章所述,SDL 優先的 GraphQL 伺服器開發面臨諸多挑戰,例如保持 SDL 與解析器同步模組化你的 GraphQL schema以及獲得出色的 IDE 支援。大多數問題可以解決,但這需要學習、使用和整合大量額外工具。

今天我們推出一個實現了程式碼優先 GraphQL 伺服器開發方法的庫:GraphQL Nexus


介紹 GraphQL Nexus

兩全其美:Schema 優先與程式碼優先

在上一篇文章中,我們對構建 GraphQL 伺服器的 schema 優先、SDL 優先和程式碼優先方法有了理解

  • Schema 優先:預先進行 schema 設計是開發過程中的關鍵部分
  • SDL 優先:GraphQL schema 的 SDL 版本是 API 的事實來源
  • 程式碼優先:GraphQL schema 透過程式設計方式構建

雖然 GraphQL Nexus 是一個程式碼優先的框架,但它仍然可以用於 schema 優先開發。Schema 優先和程式碼優先並非相互對立的方法:它們結合使用時會更加有用。

藉助 Nexus,GraphQL schema 透過程式設計方式定義和實現。因此,它遵循了其他語言中 GraphQL 伺服器的成熟方法,例如 sangria-graphql (Scala)、graphlq-rubygraphene (Python)。

型別安全,與 GraphQL 生態系統相容且資料無關

GraphQL Nexus 在設計時考慮了 TypeScript/JavaScript 的智慧感知功能。它結合了 TypeScript 的泛型、條件型別和型別合併,以提供完整的自動生成型別覆蓋。Nexus 的一個核心設計目標是,以最少的手動型別註解實現最佳的型別覆蓋。

Type-safe, compatible with GraphQL ecosystem & data-agnostic

Nexus 基於 graphql-js 的基本功能構建,這使其與當前的 GraphQL 生態系統基本相容。

使用 Nexus 定義和實現 GraphQL schema

Nexus 的 API 暴露了許多函式,可讓你定義和實現 GraphQL schema 的構建塊,例如物件型別聯合介面列舉以及你在GraphQL 型別系統中找到的所有其他內容

QueryMutation 型別是 GraphQL schema 中所謂的根型別。Nexus 提供了一個簡寫 API 來定義這些型別

定義完 GraphQL schema 的所有型別後,你可以使用 makeSchema 函式建立一個 GraphQLSchema 例項,它將作為你的 GraphQL 伺服器(例如 graphql-yogaapollo-server)的基礎

makeSchema 還允許你提供一個 Prettier 配置,以便生成的程式碼符合你的風格指南 💅

GraphQL Nexus 入門

開始使用 Nexus 的最快方法是探索官方示例或使用線上Playground

1) 安裝

由於 GraphQL Nexus 嚴重依賴 graphql-js,因此在安裝時需要將其作為對等依賴

2) 配置與最佳實踐

文件中的最佳實踐部分包含許多關於理想編輯器設定和組織 Nexus 專案的提示。

由於 GraphQL Nexus 會即時生成型別定義,因此最佳的開發體驗是透過在編碼時後臺執行的開發伺服器來實現的。每當你儲存檔案時,它都會負責更新生成的型別定義。

使用 TypeScript 時,一種可能的設定是使用 ts-node-dev 作為開發伺服器

然後你可以在 package.json 中配置一個用於開發的 npm 指令碼

使用 JavaScript 時,你可以使用 nodemon

然後你可以在 package.json 中配置一個用於開發的 npm 指令碼

3) 使用 graphql-yoga 的“Hello World”示例

完成編輯器設定後,你可以開始構建你的 GraphQL schema。這是一個使用 graphql-yoga 的“Hello World”應用程式示例

4) 從 SDL 優先 API 遷移

SDL 轉換器允許你提供 SDL schema 定義,並輸出相應的 Nexus 程式碼(不包含任何解析器)

SDL converter


力求卓越的開發者體驗

Nexus API 在設計時特別注重開發者體驗。一些核心設計目標是

  • 預設型別安全
  • 可讀性
  • 開發者人體工程學
  • 輕鬆整合 Prettier

在構建 API 時執行的開發伺服器確保你始終能夠獲得剛引入的 schema 更改的自動補全和錯誤檢查。

藉助 GraphQL Playground 中新的schema 輪詢功能,當你調整 schema 時,你的 GraphQL API 也會立即重新載入。


告訴我們你的想法

我們對 GraphQL Nexus 感到非常興奮,並希望你也會如此。歡迎透過探索官方示例或遵循文件中的“入門”說明來試用 Nexus。

如果你遇到任何問題,請提交 GitHub issue 或在我們的 Slack 中聯絡我們。

不要錯過下一篇文章!

訂閱 Prisma 新聞通訊

© . This site is unofficial and not affiliated with Prisma Data, Inc.