ビジネスアクションの POST
真の REST API は、CRUD 操作(作成、読み取り、更新、削除)のみに集中します。他の REST API と同様に、Cloud API も POST、GET、PATCH、および DELETE 操作をサポートするエンドポイントを使用してこれらの CRUD 操作を公開します。
ただし状況によっては、システム API で、単一の作成、読み取り、更新、または削除操作に直ちにマップされないビジネスプロセスのトリガを行う必要があります。例えば、システム API はアクティビティをアサインする機能を公開します。この操作では、アクティビティの assignedUser フィールドと assignedGroup フィールドの値を変更します。しかし、アサインされたユーザーとグループは、ClaimCenter 内部のアサインロジックによって判別できます。アサインは、アクティビティ自体、各グループの現在のワークロード、または特定のユーザーが休暇中であるかどうかに応じて異なる可能性があります。アクティビティのアサインは、呼び出し元アプリケーションが assignedUser フィールドと assignedGroup フィールドの設定方法を常に判別できるとは限らないため、PATCH を使用して実行することはできません。
標準の REST アーキテクチャでは、この種類のビジネスアクションに対する操作はありません。したがって、Cloud API では以下の取り決めを採用しています。
- ビジネスアクションを実行するエンドポイントは POST 操作を使用する。
- ビジネスアクションを実行するエンドポイントのパスは、動詞で終わる(「アサイン」や「完了」など)。
ビジネスアクションを実行するエンドポイントの例は、以下のとおりです。
- POST
/common/v1/activities/{activityId}/assign(対応するアクティビティをアサイン) - POST
/common/v1/activities/{activityId}/complete(対応するアクティビティに完了のマークを付ける) - POST
/claim/v1/claims/{claimId}/cancel(対応するドラフトのクレームをキャンセル) - POST
/claim/v1/claims/{claimId}/submit(対応するドラフトのクレームを送信し、それによって未了クレームに格上げ)
ビジネスアクションの POST と要求ペイロード
リソースを作成するすべての POST エンドポイント(特定のアクティビティの備考・経緯を作成する POST /common/v1/activities/{activityId}/notes など)には、要求ペイロードが必要です。一部のエンドポイントでは、ペイロードが空白の場合がありますが、要求ペイロードは必ず必要です。
ビジネスアクションを実行する POST エンドポイントでは、ペイロード要求がさまざまに異なる場合があります。
- 一部のビジネスアクション POST にはペイロードが必要(例えば、
activities/{activityId}/assignではアサイン条件を指定するペイロードが必要)。 - 一部のビジネスアクション POST ではオプションでペイロードを使用可能(例えば、
activities/{activityId}/completeにはペイロードが不要だが、アクティビティを完了する間に備考・経緯をアクティビティに添付したい場合はペイロードを指定可能)。 - 一部のビジネスアクション POST ではペイロードを許可できない。
ビジネスアクション POST で要求ペイロードを要求、許可、または禁止するかどうかを判別するには、このガイドの該当セクションを参照してください。
ビジネスアクション POST とロストアップデート
ビジネスプロセスが複数の呼び出しにわたる場合、最初の呼び出しは通常、データを取得する GET か、データを作成する POST のいずれかです。ビジネスプロセスに、ビジネスアクションを実行する POST が含まれる場合、この POST は通常、最初の呼び出しの後に実行され、前の呼び出しでクエリまたは作成されたリソースに対して操作を行います。
最初の GET/POST の後、その後のビジネスアクション POST の前であれば、別のプロセスでデータを変更することが可能です。これはロストアップデートを引き起こすことがあります。システム API では、ロストアップデートとは、その他のプロセスが行った変更を意図せずに上書きする、リソースへの変更です。
ロストアップデートは、チェックサム機能を使用して防ぐことができます。詳細については、ロストアップデートとチェックサムを参照してください。