2017-01-24 12 views
1

私はRelay準拠のGraphQLスキーマで作業していますが、1つの引数(レコードのID)を必要とする入力オブジェクト、または2つの他の引数(レコード番号とレコードのカタログ番号)。私はPythonとGrapheneライブラリを使用しています。ここ数/カタログの代わりに使用されるIDを許さない現在の入力オブジェクトの抜粋です:私はこれを実現するために、インタフェースと労働組合に見てきたGraphQL - 複数の必須入力フィールドに対して 'どちらか'または '

class CreateRecord(relay.ClientIDMutation): 
    "The parameters of a newly created record." 
    # Relay-compliant mutations need to specify an input class. 
    class Input: 
     "The available inputs for the CreateRecord mutation." 
     part_id = graphene.Int(description='The ID of the record.') 
     part_number = graphene.String(description='The record number.', 
             required=True) 
     catalog = graphene.String(description='The catalog of the record.', 
            required=True) 

は、しかし、避難所今まで運がなかった。より柔軟な入力オブジェクトがなければ、別の突然変異(例えばCreateRecordUsingIDのようなもの)を作成する必要があります。これを達成する方法はありますか、より一般的にはGraphQLスキーマのこの機能をサポートする方法はありますか?

+1

質問については同じ質問があります。たとえば、ユーザーを照会する場合は、IDまたはユーザー名を入力する必要がありますが、両方を入力する必要はありません。この種の検証がサポートされているかどうかはわかりません。それは共通のパターンのようです。 – jfizz

+0

@jfizz私の答えを参照してください、あなたのケースにも適用されます。 – kaqqao

答えて

1

タイプシステムで条件付き非ヌルネスを表現する方法はありません。だから、自分で解決ロジックでこれを検証しなければならないだろう。

しかし、なぜこれを2つの別個の明示的な操作に分割しないのですか? IDを必要とするものと、レコード番号とカタログ番号が必要なものはい、あなたは違う名前を付ける必要がありますが、説明は良いことであり、あなたはタイプシステムに対してではなくて働くでしょう。

突然変異デザインに関する記事シリーズがあり、特にthis entryがあなたのケースに関係しています。

関連する問題