LoginSignup
2
1

More than 5 years have passed since last update.

graphql-rubyで配列を扱う

Last updated at Posted at 2018-01-09

前提:GraphQLとそれをrubyから使うgraphql-ruby。

GraphQLはRESTやgRPCに並ぶAPIの新たな形式と言えるでしょう。
基本的なgraphql-rubyの使い方は下記がすごく詳しいです。
https://qiita.com/kielze/items/b2168d7214992e5d37bf

本題:graphql-rubyで配列を扱う(引数、返り値として)

題材として、Parentというオブジェクトを参照するクエリを下記のように作ります。
IDを引数にしてParent.find(id)で参照しリターンします。

修正前のクエリ関数parent

query_type.rb
  field :parent, Types::ParentType do
    description "Parent API"
    argument :id, !types.ID
    resolve ->(obj, args, ctx) {
      Parent.find(args[:id])
    }
  end

(先に完成版)新しいクエリ関数parents [引数・返り値が配列]

query_type.rb
  field :parents, Types::ParentType.to_list_type do
    description "Parent API"
    argument :ids, !types.ID.to_list_type
    resolve ->(obj, args, ctx) {
      Parent.find(args[:ids])
    }
  end

大事なポイント:配列=to_list_type (もしくはtypes[])

公式ドキュメントにこう記載されています。

field :newNames do
  # ...
  argument :values, types[types.String]
  # or
  argument :values, types.String.to_list_type
end

引数を配列に変換

types.IDtype.ID.to_list_typeとします。

返り値を配列に変換

Types::ParentTypeTypes::ParentType.to_list_typeとします。

実行結果

左画面にids:[1,2]という配列が引数として入力されており、
右画面に返り値parents:[ 一つ目, 二つ目]という配列が出力されています。

image.png

補遺

@yoshikyoto さま、修正ありがとうございます

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1