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

GoによるGraphQLの実装

keinuma
October 06, 2020

 GoによるGraphQLの実装

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