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

GoによるGraphQLの実装

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for keinuma keinuma
October 06, 2020

 GoによるGraphQLの実装

Avatar for keinuma

keinuma

October 06, 2020
Tweet

More Decks by keinuma

Other Decks in Programming

Transcript

  1. アジェンダ . GraphQL . Go を使うメリット . GraphQL + Go

    の . gqlgen . gqlgen の 例 . まとめ 3 / 39
  2. BaaS or 独⼒で BaaS はGraphQL のコア の が提供されている GraphQL の

    がシンプルな場 、BaaS がよさそう 14 / 39
  3. BaaS の例 AWS 提供のマネージドサービス DynamoDB, Lambda などAWS のサービスと できる Heroku

    +PostgresQL によるマネージドサービス データベースのテーブルを 義するとAPI を⽣成できる AppSync Hasura 15 / 39
  4. ⽣成されるファイル model.go : スキーマに 義されているデ ータファイル resolver.go: GraphQL の り

    にデータ をマッピング generated.go: リクエストパラメータか らモデルを⽣成( しない) 21 / 39
  5. Go のプロパティが不⾜している状 GraphQL type Todo { id: ID! text: String!

    done: Boolean! } Go type Todo struct { ID string Text string } 26 / 39
  6. ドメイン3 + GraphQL model + service + repository model にドメインを

    service にロジックを repository はinterface のみ はinfra に 31 / 39
  7. firebase auth を利⽤ echo のmiddleware でトークンの を ⾏ トークン 得

    はユーザー情 をResolver に して各API に している 35 / 39
  8. エラーを するヘルパー func AddError(ctx context.Context) (bool, error) { graphql.AddError(ctx, &gqlerror.Error{

    Path: graphql.GetPath(ctx), Message: "A descriptive error message", Extensions: map[string]interface{}{ "code": "4", }, }) return false, gqlerror.Errorf("BOOM! Headshot") } 38 / 39