ヘッダーによる一貫性の確保
ヘッダーによる一貫性の確保
一部の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 |