一貫性の確保
一貫性の確保
いくつかのBox APIでは、アプリケーションとBox間の一貫性を制御するためのヘッダーがサポートされています。
etag
、if-match
、およびif-none-match
APIを介してリクエスト可能なファイルシステムの項目 (ファイルまたはフォルダ) の多くは、項目のetag
値を返します。
たとえば、ファイルリソースはJSONレスポンスでetag
を返 します。
curl https://api.box.com/2.0/files/12345 \
-H "authorization: Bearer ACCESS_TOKEN"
{
"id": 12345,
"etag": 1,
"type": "file",
"sequence_id": 3,
"name": "Contract.pdf",
...
}
このetag
をif-match
またはif-none-match
ヘッダーの値として使用できるのは、etag
値が受信されてからリソースが変更されていないことを確認するためか、または変更されていない項目を不必要にダウンロードしないようにするためです。
たとえば、同じファイルを取得するのはそのファイルが変更された場合のみにするには、if-none-match
ヘッダーでetag
値を渡します。
curl https://api.box.com/2.0/files/12345 \
-H "authorization: Bearer ACCESS_TOKEN" \
-H "if-none-match: 1"
ファイルが変更されていない場合、このAPIコールでは空のレスポンスが返されます。
一貫性のある変更の確保
if-match
ヘッダーを使用すると、アプリケーションは、最後に調べた項目がその後別のアプリケーションまたはユーザーによって変更が加えられても、項目が変更 されないようにすることができます。これにより、2つのアプリケーションまたは2人のユーザーが項目を同時に変更しても変更が失われることはありません。
このヘッダーは、以下のエンドポイントでサポートされます。
if-match 対応のエンドポイント | |
---|---|
POST /files/:id/content | 新しいファイルバージョンをアップロード |
PUT /files/:id | ファイルの情報を更新 |
DELETE /files/:id | ファイルを削除 |
PUT /folders/:id | フォルダの情報を更新 |
DELETE /folders/:id | フォルダを削除 |
PUT /web_links/:id | ウェブリンクの情報を更新 |
DELETE /web_links/:id | ウェブリンクを削除 |
これらのAPIコールのレスポンスは、項目が存在するかどうか、およびetag
値が最新バージョンと一致するかどうかによって異なります。
項目 があるか? | Etagが一致するか? | HTTPステータス |
---|---|---|
はい | はい | 200 |
はい | いいえ | 412 |
いいえ | はい | 412 |
いいえ | いいえ | 404 |
リクエストによる不要なダウンロードの防止
if-none-match
ヘッダーを使用すると、アプリケーションは、最後に調べてから変更されていない項目の情報がダウンロードされないようにすることができます。これにより、不要な情報がダウンロードされなくなるため、アプリケーションの速度が向上し、帯域幅が節約されます。
if-none-match 対応のエンドポイント | |
---|---|
GET /files/:id | ファイ ルの情報を取得 |
GET /folders/:id | フォルダの情報を取得 |
GET /web_links/:id | ウェブリンクの情報を取得 |
GET /shared_items | 共有項目の情報を取得 |
これらのAPIコールのレスポンスは、項目が存在するかどうか、およびetag
値が最新バージョンと一致するかどうかによって異なります。
項目があるか? | Etagが一致するか? | HTTPステータス |
---|---|---|
はい | はい | 304 |
はい | いいえ | 200 |
いいえ | はい | 404 |
いいえ | いいえ | 404 |