サーバー応答 207 Multi-Status
HTTPステータスコード207(Multi-Status)の詳細
HTTPステータスコード207は、複数のステータスを1つのレスポンスで示すために使用されます。このコードは、複数のリソースの状態に関する情報を1回のリクエストで提供する必要がある状況で特に有用です。
コード207の概要
- 定義と目的:このステータスコードは、サーバーがリクエストされた複数のリソースに対して異なる状態を持つことを示します。
- 使用時期:特に、複数のリソースを一度に操作したい場合や、複数のリソースの状態を確認したい場合に適しています。
- レスポンスの構造:207レスポンスには、各リソースのURIとそのステータスが含まれます。
実践的な使用例
例1:複数のファイルの処理
ファイルのアップロードや削除など、複数のファイルに対して操作を行う場合に役立ちます。
POST /files
{
"files": [
"file1.txt",
"file2.txt"
]
}
レスポンスの例:
HTTP/1.1 207 Multi-Status
Content-Type: application/json
{
"statuses": [
{
"uri": "/files/file1.txt",
"status": "uploaded"
},
{
"uri": "/files/file2.txt",
"status": "failed"
}
]
}
例2:複数のリソースの同時更新
複数のデータベースエントリを一度に更新する際に、各エントリの状態を確認する必要があります。
PUT /resources
{
"resources": [
{"id": 1, "value": "updatedValue1"},
{"id": 2, "value": "updatedValue2"}
]
}
レスポンスの例:
HTTP/1.1 207 Multi-Status
Content-Type: application/json
{
"statuses": [
{
"uri": "/resources/1",
"status": "updated"
},
{
"uri": "/resources/2",
"status": "not modified"
}
]
}
例3:さまざまなソースからのステータス取得
異なるサービスからのデータを集約し、各サービスの状態を報告します。
GET /status
{
"services": [
"service1",
"service2"
]
}
レスポンスの例:
HTTP/1.1 207 Multi-Status
Content-Type: application/json
{
"statuses": [
{
"service": "service1",
"status": "up"
},
{
"service": "service2",
"status": "down"
}
]
}
言語別のエラー修正
Python
response = requests.get('/api/resources')
if response.status_code == 207:
# エラー処理
print("エラーが発生しました")
修正方法:
if response.status_code == 207:
statuses = response.json()['statuses']
for status in statuses:
if status['status'] != 'success':
print(f"エラー: {status['uri']}")
JavaScript (Node.js)
const response = await fetch('/api/resources');
if (response.status === 207) {
// エラー処理
console.log("エラーが発生しました");
修正方法:
if (response.status === 207) {
const data = await response.json();
data.statuses.forEach(status => {
if (status.status !== 'success') {
console.log(エラー: ${status.uri});
}
});
}
PHP
$response = file_get_contents('/api/resources');
if ($http_response_header[0] === 'HTTP/1.1 207 Multi-Status') {
// エラー処理
echo "エラーが発生しました";
修正方法:
if ($http_response_header[0] === 'HTTP/1.1 207 Multi-Status') {
$data = json_decode($response, true);
foreach ($data['statuses'] as $status) {
if ($status['status'] !== 'success') {
echo "エラー: {$status['uri']}";
}
}
}
問題点と制限
- 可能なエラー:複数のリソースの状態を一度に返すため、レスポンスの処理が複雑になる可能性があります。
- レスポンス形式の制限:207レスポンスでは、各リソースのURIとステータス情報が必要です。
- リクエストの最適化に関する推奨:リソースの数が多い場合、リクエストを分割して処理することを検討してください。
実際のアプリケーションでの成功例
多くのサービスがHTTPステータスコード207を利用しており、特に複数のリソースの管理や状態確認に役立っています。
サービス名 | 使用ケース | 開発者のフィードバック |
---|---|---|
ファイル管理サービス | 複数ファイルのアップロード | 効率的で便利です。 |
データベース管理ツール | 一括更新 | 状態を一目で確認できるのが良い。 |
HTTPステータスコード207は、複数のリソースに対する操作を効率的に管理するための強力なツールです。このコードを適切に活用することで、開発者は複雑なリソース管理の課題を簡素化することができます。