Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apollo Federationで実現するGraphQL APIのマイクロサービス化

Apollo Federationで実現するGraphQL APIのマイクロサービス化

「JX Press Tech Talk #backend 速報サービスを支えるバックエンドの技術」で発表した『Apollo Federationで実現するGraphQL APIのマイクロサービス化』の資料です

https://jxpress.connpass.com/event/210867/

Kanata Uchiyama

June 02, 2021
Tweet

Other Decks in Programming

Transcript

  1. Who am I?
 
 
 
 内山 彼方(Kanata Uchiyama)
 ◦

    NewsDigestチーム所属で、
 GoやらPythonやらを書いてます
 
 ◦ インターン生数人と一緒に開発してます
 
 ◦ API開発にハマっていて勉強中です
 ▪ 特にGraphQLに関心があります
 
 Profile画像

  2. 1, はじめに
 
 
 
 🙏 おことわり
 
 • まだ本番リリースしていないお試し施策をテーマとしています

    
 
 • 発表では概要程度にし、詳細は後日公開するテックブログに記載します 

  3. 1, GraphQLとは
 
 
 
 📝 NewsDigestではGraphQL APIを採用しています
 アプリ
 GraphQL

    API
 APIをどう伸ばすか
 
 • チームメンバー増えてきた
 • 新機能追加の要求増えてる
 • (個人的に興味あるし)

  4. 2, API分割の検討
 
 
 
 🤔 分割のアプローチ
 アプリ
 GraphQL API


    GraphQL API
 アプリ
 GraphQL API
 GraphQL API
 パス
 ルーティング 
 🤔 分割するたびにアプリ側で接続先増やすことになる 😊 接続先ドメインは一つになる 🤔 どのクエリがどのパスのAPIで実装されているかを
   把握する部分が課題として残る https://feed-api.example.com/query https://payment-api.example.com/query https://api.example.com /feed /payment
  5. 2, API分割の検討
 
 
 
 🤔 分割のアプローチ
 アプリ
 GraphQL API


    GraphQL API
 アプリ
 GraphQL API
 GraphQL API
 パス
 ルーティング 
 🤔 分割するたびにアプリ側で接続先増やすことになる 😊 接続先ドメインは一つになる 🤔 どのクエリがどのパスのAPIで実装されているかを
   把握する部分が課題として残る https://feed-api.example.com/query https://payment-api.example.com/query https://api.example.com /feed /payment 👀 一つのGraphQL APIとして
 稼働させることができるっぽい
 (しかも2パターン見つけた)

  6. 3, 比較
 
 
 
 出典: https://www.apollographql.com/blog/apollo-federation-f260cf525d21/ 1. GraphQL API,

    REST API, 各種RDBなどを
 一つのGraphQL APIとして表現
 
 2. Gatewayでスキーマを定義する
 ◦ バックエンドはそれぞれで完結
 ◦ スキーマ重複OK, 相互参照不可
 
 3. Hasura Cloudを使うなら、
 マネージドサービスゆえ課金前提
 1. Apollo Federation対応のGraphQL API群を
 一つのGraphQL APIとして表現
 
 2. Gatewayはスキーマを統合する
 ◦ 個々のAPIを全体の部分グラフとして実装
 ◦ スキーマ重複NG, 相互参照可能
 
 3. OSSとして公開されており、自前ホスト前提
 出典: https://hasura.io/
  7. 3, 比較
 
 
 
 出典: https://www.apollographql.com/blog/apollo-federation-f260cf525d21/ 1. GraphQL API,

    REST API, 各種RDBなどを
 一つのGraphQL APIとして表現
 
 2. Gatewayでスキーマを定義する
 ◦ バックエンドはそれぞれで完結
 ◦ スキーマ重複OK, 相互参照不可
 
 3. Hasura Cloudを使うなら、
 マネージドサービスゆえ課金前提
 1. Apollo Federation対応のGraphQL API群を
 一つのGraphQL APIとして表現
 
 2. Gatewayはスキーマを統合する
 ◦ 個々のAPIを全体の部分グラフとして実装
 ◦ スキーマ重複NG, 相互参照可能
 
 3. OSSとして公開されており、自前ホスト前提
 出典: https://hasura.io/ 自由に作ったバックエンドから必要なス キーマを抜き出してクライアントに提供す る クライアントから見える一つのGraphQL APIをイメージしながら 
 部分グラフを実装していく
  8. 4, Apollo Federationの特徴
 
 Apollo gateway 
 
 アプリ
 📝

    スキーマの拡張
 Apollo gateway User API Review API
  9. 😊 導入自体は非常に簡単
 サンプルを真似てgateway作って、既存APIをターゲットリストに入れるだけ 
 😊 開発体験も非常に良い
 
 📝 単一のスキーマに統合するという仕様上、同名クエリが共存できない 


    📝 gateway - サービス 間の認証を実装する際、自前で用意する必要がある 
 📝 あくまでApollo Federation対応しているサーバーのみgatewayから接続できる 
 Goのgqlgenだったら v0.11.0 以上から対応、みたいな 
 5, 知見紹介
 📝 稼働中APIに繋ぎ込んでみて分かったポイントを紹介
 󰝊 詳しくは後日ブログで公開します