Ruby
api
GraphQL

GraphQL を練習するための小さなスクリプトの例

話題の GraphQL を試してみようと graphql gem に加えて graphiql-rails を入れ、ジェネレーターを実行し、その上 yarn で apollo-boost graphql-tag graphql を入れ、Vue 用に vue-appollo も入れとくか、としていたら自分が何をしているのかわからなくなってきたのでスタート地点に戻って GraphQL のみを単体で簡単に試せる方法を調べました。

下のコードは手動で gem i graphql すれば ruby ですぐに実行できます。

ping に対して pong を返す

require "bundler/inline"

gemfile do
  gem "graphql"
end

GraphQL::VERSION                # => "1.8.5"

class QueryType < GraphQL::Schema::Object
  field :ping, String, null: false, description: "疎通確認"
  def ping
    "pong"
  end
end

class FooSchema < GraphQL::Schema
  query(QueryType)
end

FooSchema.execute("{ ping }").to_h # => {"data"=>{"ping"=>"pong"}}

User.find(1) の結果を返す

require "bundler/inline"

gemfile do
  gem "graphql"
end

GraphQL::VERSION                # => "1.8.5"

class UserType < GraphQL::Schema::Object
  field :id,   ID,     null: false
  field :name, String, null: false
end

class QueryType < GraphQL::Schema::Object
  field :user, UserType, null: true do
    description "指定IDのユーザーを取得"
    argument :id, ID, "ユーザーID", required: true
  end

  def user(id:)
    Struct.new(:id, :name).new(id, "alice") # User.find(id) したことにする
  end
end

class FooSchema < GraphQL::Schema
  query(QueryType)
end

FooSchema.execute(<<~QUERY).to_h # => {"data"=>{"user"=>{"id"=>"1", "name"=>"alice"}}}
{
  user(id: 1) {
    id
    name
  }
}
QUERY