graphql-ruby の v2.0.14リリースで one_of がサポートされたので紹介します。
oneOf について
- 入力オブジェクトのうちいずれか1つだけのフィールドが指定されていることが保証される機能です
- まだ公式仕様には含まれていませんが、GraphQL Working Group で議論されています
- 現在は RFC(Request For Comments)で、実装やフィードバックを募集している段階のようです
- graphql-ruby 等の一部のライブラリでは先行してサポートしているものがあるようです
例
- 以下の場合
id
かusername
のどちらか一方だけが指定されていることを意味します - input の型に
@oneOf
を付与します
input FindUserInput @oneOf {
id: ID
username: String
}
- Input Objects 内では以下のように、どちらも
required: false
にします
class FindUserInput < Types::BaseInput
one_of
# Either `{ id: ... }` or `{ username: ... }` may be given,
# but not both -- and one of them _must_ be given.
argument :id, ID, required: false
argument :username, String, required: false
end
- 両方が指定されている場合や、どちらも指定されていない場合はエラーになります