Salesforce 認定 Platform Data アーキテクト 無料問題 5 / 10 ・ 分野3: Salesforce データ管理
基幹システムから、Composite で取引先・取引先責任者・商談をまとめて作る連携を設計している。連携の担当者は「失敗したら HTTP のエラーの状態コードが返るので、それを見て再送すればよい」と考えている。REST API Developer Guide(Spring '23)の「Composite Request Body」の説明に合うものはどれか。
- allOrNone が false なら最上位が HTTP 207 を返し、どのサブ要求が失敗したかを一覧で知らせる
- サブ要求が1つでも失敗すると最上位は HTTP 500 を返し、応答の本文は空になる
- allOrNone が true でも false でも最上位は HTTP 200 を返すので、失敗は各サブ要求の応答で見分ける
- allOrNone が true なら、1つでも失敗すると最上位の要求が HTTP 400 を返すので、状態コードで分かる
正解と解説を見る
正解: C
正解の理由
REST API Developer Guide(Spring '23)の Composite Request Body は、allOrNone を、サブ要求の処理中にエラーが起きたときの扱いを決める値として説明する。true なら Composite の要求全体が巻き戻される。そのうえで「In either case, the top-level request returns HTTP 200 and includes responses for each subrequest」とし、どちらの場合も最上位の要求は HTTP 200 を返して各サブ要求の応答を含むと書く。失敗の判定は、最上位の状態コードではなく、サブ要求ごとの応答で行う。
違う選択肢
「allOrNone が true なら、1つでも失敗すると最上位の要求が HTTP 400 を返すので、状態コードで分かる」… ガイドは、allOrNone が true のとき要求全体は巻き戻されるが、最上位の要求は HTTP 200 を返し、各サブ要求の応答を含むと書く。状態コードでは失敗が分からない。
「allOrNone が false なら最上位が HTTP 207 を返し、どのサブ要求が失敗したかを一覧で知らせる」… ガイドは、どちらの場合も最上位の要求は HTTP 200 を返し、各サブ要求の応答を含むと書く。207 を返すという記述は無い。
「サブ要求が1つでも失敗すると最上位は HTTP 500 を返し、応答の本文は空になる」… ガイドは、最上位の要求は HTTP 200 を返し、各サブ要求の応答を含むと書く。失敗の内容は、それぞれのサブ要求の応答から読む。
つまずき方
まとめて送る要求では、外側の成功と中身の成功が別になる。再送の判断を状態コードだけに頼ると、巻き戻された要求を成功とみなして、データが欠けたまま進む。