不久之前寫過一篇『從 graphql-go 轉換到 gqlgen』,目前團隊舊有的專案還是繼續用 graphql-go 來撰寫,不過之後需求量越來越大,維護 graphql-go 就越來越困難,故有在想怎麼把 gqlgen 跟 graphql-go 相容在一起,那就是把這兩個套件想成不同的服務,再透過 Gateway 方式完成 single data graph。至於怎麼選擇 GraphQL Gateway 套件,最容易的方式就是使用 @apollo/gateway,但是由於個人比較偏好 Go 語言的解決方案,就稍微找看看有無人用 Go 實現了 Gateway,後來找到 nautilus/gateway,官方有提供文件以及教學 Blog 可以供開發者參考。底下會教大家使用 nautilus/gateway 將兩個不同的服務串接在一起。
線上影片
- 00:00 為什麼有 GraphQL Gateway 需求?
- 02:16 用兩個 Routing 來區分 graphql-go 跟 gqlgen
- 03:00 用 jwt token check
- 03:40 選擇 GraphQL Gateway 套件
- 04:58 main.go 撰寫機制介紹
- 06:05 如何將 Token 往後面 Service 發送?
- 06:58 看看完整的程式代碼
- 07:56 最後心得感想
如果對於課程內容有興趣,可以參考底下課程。
如果需要搭配購買請直接透過 FB 聯絡我,直接匯款(價格再減 100)
整合 graphql-go + gqlgen
要把兩個不同的套件整合在一起,最簡單的方式就是分不同的 URL 區隔開來,兩邊都是透過 Bearer Token 來進行使用者身份確認。
透過 jwt 驗證及讀取使用者資料
|
|
撰寫 graphql-gateway
使用 nautilus/gateway 可以簡單將 Schema 合併成單一 Data,不過此套件尚未支援 subscription。
|
|
由於之後要整合進 Docker 內,故透過 LookupEnv 來決定 Server 跟 Port。這樣可以將 /graphql
及 /query
的 Schema 綁定在一起了。另外要解決的就是如何將 Authorization 傳到後面 GraphQL Server 進行認證。
|
|
其中上面的 Access-Control 用來解決 CORS 相關問題。前端用各自電腦開發時,就需要此部分。
心得
用 gqlgen 在開發上效率差很多,現在透過這方式,可以保留舊的 Schema 搭配新的 gqlgen 開發模式,未來也可以將共通的功能獨立拆成單一服務,再透過 gateway 方式將多個模組合併。