gqlgenでTypeにプロパティを追加してみよう
gqlgenでTypeにプロパティを追加してみよう
前回ではgqlgenでサーバーをlocalhostに立ち上げて、GraphQL Playgroundから実際に Query
が実行されるところまで確認できました。
今回は一度コード生成された後にGraphQLのインタフェースを変えたい場合どう実装していくのか書いていこうと思います。
gqlgen
は Schema first でGraphQLなAPIを作るためのライブラリです。
schema.grpahql
を編集してGo
のコードを再生成するところまで確認していきましょう。
前回
まず前回までのまとめなのですが、下記のQueryを実行すると Todo.id
の一覧が取得できたことまで確認しました。
Query
query { todos { id } }
Response
{ "data": { "todos": [ { "id": "1" }, { "id": "2" }, { "id": "3" } ] } }
今回はこの Todo
に title
というプロパティを足していきたいと思います。
schema.graphqlの編集
初めに schema.graphql
を編集していきましょう。今回は Todo
にプロパティを追加していくので下記のスキームに注目します。
type Todo { id: ID! text: String! done: Boolean! user: User! }
上の type Todo
から始まるものはレスポンスの形式を表しています。 ID!
型の id
や String!
型の text
というプロパティがあるといった具合ですね。これは gqlgen generate
の後に models_gen.go
にコードが吐き出されます。
今のままの Todo
では id,text,done,user
の4つのフィールドはレスポンスとして返せますが title
は返すことができません。title
を返せるようにするためにまず schema.graphql
を編集して Todo
に title
を追加しましょう。
type Todo { id: ID! text: String! done: Boolean! user: User! title: String! # ここが追加 }
Scehma first
を謳っているgqlgen
ではスキーマファイルと実装するGraphQL
のインtらフェースが合うように開発を進めていきます。
先ほど、titlte: String!
の部分を追加しました。続いてこのschema
の情報をGo
のコードに反映させていきます。
Goのコードを生成する
前回ではgqlgen init
した結果、ExmapleのGo
のコードが作成されました。
追加したフィールドをGo
に反映させたい場合はgqlgen generate
を実行します。
$ gqlgen generate
ちなみに短縮して gqlgen
とだけ打って実行しても構いません。
$ gqlgen
実行後 generated.go
, models_gen.go
が変更されていれば成功です。
特に models_gen.go
の中身を確認してみましょう。
Todo
に Title
というプロパティが追加されていることが確認できると思います。
type Todo struct { ID string `json:"id"` Text string `json:"text"` Done bool `json:"done"` User User `json:"user"` Title string `json:"title"` }
次に前回と同様にresolver.go
の Todos
メソッドを編集していきましょう。
func (r *queryResolver) Todos(ctx context.Context) ([]Todo, error) { return []Todo{ Todo{ ID: "1", Title: "First", }, Todo{ ID: "2", Title: "Second", }, Todo{ ID: "3", Title: "Third", }, }, nil }
これで完了です。GraphQL Playgroundから結果を確認してみましょう。
$ go run ./server/server.go
サーバーが立ち上がったあら下記のQueryを貼り付けて実行してみましょう。
{ todos { id title } }
{ "data": { "todos": [ { "id": "1", "title": "First" }, { "id": "2", "title": "Second" }, { "id": "3", "title": "Third" } ] } }
画面はこのような具合になっていると思います。
終わりに
今回はプロパティの追加するというユースケースを通して gqlgen
の機能を使い Schema first
で実装をしていきました。
GitHubにここまでの内容を公開しています。
https://github.com/bannzai/gqlgen-demo
branchは fix/add/field
となっています。前回からの差分としてPRを一つ作ってあります。
https://github.com/bannzai/gqlgen-demo/pull/2
この記事がいいと思ったら、GitHubのスターください
おしまい \(^o^)/