サーバー応答 428 Precondition Required
HTTP ステータスコード 428(前提条件が必要)について
HTTP ステータスコード 428 は、サーバーがリクエストを実行する前に特定の条件を満たすことを要求する際に使用されます。このコードは、API との相互作用において特に重要であり、リソースの前提条件を考慮する必要がある状況で発生することがあります。
ステータス 428 の使用例
以下に、HTTP ステータス 428 が発生する具体的な状況を示します。
-
リソースの変更に関する状況
クライアントがリソースを更新しようとするが、更新を行うための条件を指定していない場合、サーバーはリクエストを拒否することがあります。たとえば、他のクライアントによってリソースが変更されている場合、クライアントはリクエストを実行する前に必要な条件を提供する必要があります。
-
バージョン管理
リソースを削除または変更しようとする際、クライアントは現在のリソースのバージョンに基づいて操作を行うことを示す必要があります。たとえば、
If-Match
ヘッダーを使用してバージョンを確認することが求められます。クライアントがこのヘッダーを指定しない場合、ステータス 428 が返される可能性があります。 -
キャッシュと状態
クライアントが変更される可能性のあるデータをリクエストする際に、最新のデータで作業する意志を示さない場合(たとえば、
If-None-Match
ヘッダーを使用する場合)、サーバーは条件を要求することがあります。これにより、古い情報の提供を避けることができます。
ステータス 428 のエラー修正例
以下は、さまざまなプログラミング言語でステータス 428 を修正する方法の例です。
言語 | コード例 |
---|---|
JavaScript |
const url = 'https://api.example.com/resource'; const headers = new Headers({ 'If-Match': 'etag_value' // バージョン確認のための ETag を指定 }); fetch(url, { method: 'PUT', headers: headers, body: JSON.stringify({ data: 'new data' }) }) .then(response => { if (response.status === 428) { console.error('リクエストを実行するための条件が必要です。'); } }); |
Python |
import requests url = 'https://api.example.com/resource' headers = { 'If-Match': 'etag_value' # バージョン確認のための ETag を指定 } response = requests.put(url, headers=headers, json={'data': 'new data'}) if response.status_code == 428: print('リクエストを実行するための条件が必要です。') |
PHP |
$url = 'https://api.example.com/resource'; $options = [ 'http' => [ 'header' => "If-Match: etag_value\r\n", // バージョン確認のための ETag を指定 'method' => 'PUT', 'content' => json_encode(['data' => 'new data']), ], ]; $context = stream_context_create($options); $result = file_get_contents($url, false, $context); if ($http_response_header[0] === 'HTTP/1.1 428 Precondition Required') { echo 'リクエストを実行するための条件が必要です。'; } |
HTTP ステータスコード 428 は、特定の条件を満たさない限り、リクエストを実行しないことを示す重要なメカニズムです。クライアントは、このコードに対処するために、必要な条件を正確に指定することが求められます。これにより、サーバー側でのリソースの整合性が保たれ、期待される結果を得ることができます。