制限事項
Relayリゾルバーにはいくつかの制限があります。ここでは、既知の制限事項をリストアップし、可能な限り代替策を示します。
`info`引数の非サポート
完全なGraphQL実装では、リゾルバーは`info`引数にアクセスできます。この引数は、現在のRelayリゾルバーでは使用できません。
抽象型の非サポート
現在、Relayリゾルバーを使用して、複数の具体的な型を持つインターフェースまたはユニオンを定義することはできません。これは今後サポートしたいと考えていますが、まだ実装されていません。
すべてのフィールドはnull許容である必要がある
現在、nullバブリングを実装せずにエラーをnullに強制するために、すべてのリゾルバーをnull許容として型指定する必要があります。将来的には、リゾルバーで厳密なセマンティックなnull許容性の何らかのバージョンをサポートすることを予定しています。
すべてのGraphQL構成要素がサポートされているわけではない
現在、RelayリゾルバーはGraphQL構成要素のサブセットのみをサポートしています。たとえば、現在では、Relayリゾルバーを使用して入力型、列挙型、またはインターフェースを定義することはできません。
ミューテーションの非サポート
現在、Relayリゾルバーは読み取りパスのみをサポートしています。ミューテーションフィールドの定義はまだサポートされていません。リアクティブスキーマに対してミューテーションを実行する意味を理解するために取り組んでおり、将来的にはサポートすることを期待しています。
リゾルバーは常に遅延評価される
現在、Relayリゾルバーは常にフラグメントごとに遅延評価されます。これには、リゾルバーが読み取られない場合、評価されないという利点があります。ただし、クライアントスキーマがデータの取得に非同期リクエストを行う場合、ウォーターフォールが発生する可能性があります。クエリ内のすべてのフィールドをリクエスト時に評価するなど、Relayリゾルバーの他の実行戦略を積極的に検討していますが、リゾルバーの定義方法は安定したままであると予想されます。
冗長/扱いにくいdocblock構文
現在、リゾルバーを定義するには、特別な構文を使用し、関数の名前と型ですでに指定されている情報を複製するdocblockを持つ関数を定義する必要があります。さらに、これらの値が一致することを強制するために、Relayは生成された型に型アサーションを出力します。これらのアサーションは安全性を確保しますが、開発者の経験としては扱いにくいです。
これらの問題に対処するために、Gratsが採用しているアプローチと同様に、FlowまたはTypeScriptコードから名前と型を推論できる、より効率的なアプローチを検討しています。この構文は、今後のRelayのバージョンで使用できるようになる可能性があります。