2016-12-20 22 views
1

単一のトランザクションで突然変異操作全体を実行するGraphQLサービスを提供したいと思います。単一トランザクションでのGraphQL突然変異操作

トップレベルのフィールドは、1つのトランザクションで順次処理され、それに応じてデータベースが変更されます。実行中にエラーが発生していない場合にのみ、変更をデータベースにコミットする必要があります。変更しない場合は、すべてロールバックする必要があります。

今、私は2つの質問があります。GraphQL仕様によると、トップレベルフィールドのシリアル実行は、各トップレベルのフィールドは、その前に、その変更後の状態を反映した値で記入されることを意味

  1. を後のフィールドでエラーが発生した場合に認識されます。後のトップレベルのフィールドでトランザクションをロールバックするエラーが発生した場合、これはフィールドの実際の値ではありませんか?

  2. トップレベルフィールドの突然変異が失敗した場合、トランザクションは今後の処理を妨げ、すべての変更がロールバックされるため、次のトップレベルフィールドを実行する意味がありません。 GraphQLセマンティックによれば、これらのフィールドの実行をスキップすることはできますか(nullを返し、おそらくエラーリストにエントリする)?

+1

それはすべて、urバックエンドの実装に依存しますが、GraphQLとは関係ありません。 GraphQLは、バックエンドとやりとりするためのインターフェイスに過ぎません。 – Mox

+0

はい、大丈夫ですが、それはまた、ベストプラクティス/ APIユーザーの期待の問題です。 – Leisetreter

答えて

2

私はGraphQL仕様のその部分を誤解してしまいましたか?私はあなたの質問を理解している場合、別の突然変異としてトランザクションのDB書き込み/更新操作を考えています。

GraphQLには、1つ以上のトップレベルフィールドを持つことができる突然変異ルートオブジェクトがあります。これらのトップレベルのフィールドは個々の突然変異です。トランザクションの振る舞いを持つサービスが必要な場合は、それを単一の突然変異として実装します。バックエンドの実装では、トランザクションの動作を保証する方法を扱う必要があります。

あなたが混乱してしまった仕様の部分は、複数の突然変異のトップレベルフィールド(選択セット)があるときにどうなるかに関するものです。各変異は独立している。

+0

私はこのような仕様を解釈します:GraphQL要求には1つのGraphQL操作があります。これは突然変異です。突然変異は、(フィールドを解決する副作用によってサーバーに実装されているように)最上位レベルのフィールドを連続的に変更します。 ここでは、これらのすべてのトップレベルフィールドの変更を1つのトランザクションに入れたいと考えています。 質問は、トップレベルのフィールドにエラーがあっても、トップレベルのフィールドを解決する副作用が実行されないように、スペックを解釈できるかどうかです。 – Leisetreter

+0

いいえ、仕様はそのように解釈することはできません。 GraphQLはトランザクションとは関係ありません。これは、選択したストレージ(永続的または非永続的)を使用してシーンの背後に格納されたデータへのインタフェースです。トランザクションは過去のGraphQL層を処理する必要があります。 –

関連する問題