リビジョンと競合
リビジョンはサーバーが管理するカウンターです。6 つの書き込みが送られた値を検査し、不一致は後から来た値に統合せず拒否されます。
リビジョンは変更ごとにサーバーが増やす整数です。読み取り、書き込みと一緒に返し、その間に何かが変わっていればサーバーは書き込みを拒否します。考えている間に何かがロックされることはありません。
どれが持つか
15 個のレスポンスがリビジョンを返します。レコードが持ち、オブジェクト、価格表、保存済みリポート、ダッシュボード、商取引ポリシーも持ちます。
フィールドは持ちません。 フィールドはオブジェクト経由で読み取られ、フィールドが変わればオブジェクトのリビジョンが動きます。
どれが検査するか
リビジョンを返すことと検査することは別です。本文に revision を取る書き込みは 6 つで、古さを理由に拒否されうるのはその 6 つだけです。
| 書き込み | リビジョンが固定するもの |
|---|---|
PUT /objects/{objectId}/records/{recordId} |
更新するレコード |
DELETE /objects/{objectId}/records/{recordId} |
アーカイブするレコード |
PATCH /objects/{objectId} |
名称を変更するオブジェクト |
PUT /settings/commercial |
商取引ポリシー |
POST /approvals |
申請するレコード |
POST /documents |
出力するレコード |
後ろの 2 つは更新ではありません。別のものが土台にするレコードのバージョンを固定します。承認は承認者が読む内容をスナップショットし、ドキュメントはそのリビジョン時点のレコードを出力します。ここで古い値を送ることは、作成者が見ていないものを承認または出力することを意味するため、最新に解決せず拒否されます。
拒否への対処
古いリビジョンは 409 を返します。統合すべきものはありません。2 つのバージョンのどちらを意図したのか、サーバーには分からないからです。
- レコードを読み直します。
- 変わった値をどうするか決めます。利用者に尋ねるか、再計算します。
- いま読んだリビジョンで書き込みを送ります。
同じリビジョンで再試行すれば同じように失敗します。変わった内容を見ずに最新のリビジョンで再試行するのは、他人の編集を黙って上書きする方法です。
バージョンと呼ばれる 3 つのもの
| 用語 | 何か |
|---|---|
レコードの revision |
上記の楽観的同時実行制御のカウンター |
GET /capabilities の revision |
回答を読み取ったモジュールポリシーのリビジョン。ワークスペースのモジュールや権限が変わったときに動き、レコードが変わっても動きません |
見積の version |
人が作成した意図的な番号付きの改訂で、専用のルートから読み戻せます |
書き込みで検査されるのは最初のものだけです。