graphql-rubyでinterfaceを定義してみる

こんにちは!kossyです!




さて、今回はgraphql-rubyでinterfaceを定義する方法について、ブログに残してみたいと思います。



環境

Ruby 2.6.3
Rails 6.0.3.4
graphql 1.11.6



created_atとupdated_atをinterface化する

ジェネレータを使ってGraphQLのセットアップを行うと、graphql/types/base_interface.rbというファイルが生成されるかと思います。
このファイルをincludeすることによって、interfaceの作成を行うことができます。

例として、created_atとupdated_atをinterfaceにしてみたいと思います。

module Types
  module TimestampInterface
    include Types::BaseInterface

    field :updated_at, GraphQL::Types::ISO8601DateTime, null: false
    field :created_at, GraphQL::Types::ISO8601DateTime, null: false
  end
end

このファイルを、任意のTypeクラスのファイルでimplementsすることで、明示的にcreated_atとupdated_atのfieldを定義しなくとも、
graphqlから叩けるようになります。

# graphql/types/post_type.rb

module Types
  class PostType < Types::BaseObject
    implements Types::TimestampInterface

    field :id, ID, null: false
    field :user_id, Integer, null: false
    field :title, String, null: false
    field :body, String, null: false
    field :status, Integer, null: false
  end
end

これで試しにGraphqlのGUIクライアントであるAltairで叩いてみます。

f:id:kossy-web-engineer:20210212234729p:plain

PostTypeに明示的にfield定義していなくとも叩くことができてます。




勉強になりました。