コンテンツ

    サーバー応答 207 Multi-Status

    HTTPステータスコード207(Multi-Status)の詳細

    HTTPステータスコード207は、複数のステータスを1つのレスポンスで示すために使用されます。このコードは、複数のリソースの状態に関する情報を1回のリクエストで提供する必要がある状況で特に有用です。

    207 - Multi-Status

    コード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は、複数のリソースに対する操作を効率的に管理するための強力なツールです。このコードを適切に活用することで、開発者は複雑なリソース管理の課題を簡素化することができます。