
機能:
'oneOf' Input Object
'oneOf' Input Object
oneOf input objectは特殊な種類のinput objectです。入力フィールドのうち正確に1つだけを入力として指定しなければならず、それ以外の場合はサーバーが検証エラーを返します。この動作はGraphQLの入力にポリモーフィズムをもたらし、よりすっきりとしたスキーマを設計できるようになります。
たとえば、アプリケーションでユーザーを取得する場合、ユーザーIDやメールアドレスなど、さまざまなプロパティで行うことができます。これを実現するには、通常、各プロパティごとに別々のフィールドを作成する必要があります:
type Query {
userByID(id: ID!): User
userByEmail(email: String!): User
}oneOf input objectを使用することで、代わりに UserByInput oneOf input objectを通じてすべてのプロパティを受け付ける単一のフィールド user を持つことができます。この場合、プロパティ(IDまたはメールアドレス)のうちいずれか1つだけを指定できかつ指定しなければならないことがわかります:
type Query {
user(by: UserByInput!): User
}
input UserByInput @oneOf {
id: ID
email: String
}クエリでは、プロパティのうち正確に1つに対して入力値を指定します:
{
tom: user(by: {
id: 1
}) {
name
}
jerry: user(by: {
email: "jerry@warnerbros.com"
}) {
name
}
}