graphql-rubyでinterfaceを定義してみる
こんにちは!kossyです!
さて、今回はgraphql-rubyでinterfaceを定義する方法について、ブログに残してみたいと思います。
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で叩いてみます。
PostTypeに明示的にfield定義していなくとも叩くことができてます。
勉強になりました。