Obsah

    Odpověď serveru 207 Multi-Status

    Kratký přehled status kódu 207

    Status kód HTTP 207 (Multi-Status) se používá k označení více stavů v jedné odpovědi. Tento kód je zvláště užitečný v situacích, kdy je potřeba poskytnout informace o stavu několika zdrojů v rámci jednoho požadavku.

    207 - Multi-Status

    Definice a účel

    Kód 207 je součástí specifikace WebDAV (Web Distributed Authoring and Versioning), která rozšiřuje protokol HTTP. Umožňuje serveru vrátit více stavových kódů pro různé zdroje, což je nezbytné, když se operace týkají více objektů najednou.

    Kdy použít kód 207

    Kód 207 by měl být použit v případech, kdy klient provádí operace nad více zdroji, například při hromadném nahrávání, aktualizaci nebo mazání souborů. Tento kód usnadňuje efektivní zpracování odpovědí od serveru.

    Struktura odpovědi s kódem 207

    Odpověď serveru s kódem 207 obsahuje XML strukturu, která popisuje stav jednotlivých zdrojů. Tato struktura může vypadat následovně:

    <multistatus>
        <response>
            <href>http://example.com/resource1</href>
            <status>HTTP/1.1 200 OK</status>
        </response>
        <response>
            <href>http://example.com/resource2</href>
            <status>HTTP/1.1 404 Not Found</status>
        </response>
    </multistatus>
    

    Praktické příklady použití kódu 207

    Příklad 1: Zpracování více souborů

    Popis situace

    Klient posílá požadavek na server pro nahrání několika souborů najednou. Server může odpovědět s různými stavy pro každý soubor.

    Příklad požadavku a odpovědi

    POST /upload HTTP/1.1
    Host: example.com
    Content-Type: multipart/form-data
    
    --boundary
    Content-Disposition: form-data; name="file1"; filename="file1.txt"
    Content-Type: text/plain
    
    ...obsah souboru...
    --boundary
    Content-Disposition: form-data; name="file2"; filename="file2.txt"
    Content-Type: text/plain
    
    ...obsah souboru...
    --boundary--
    
    HTTP/1.1 207 Multi-Status
    Content-Type: application/xml
    
    <multistatus>
        <response>
            <href>http://example.com/file1.txt</href>
            <status>HTTP/1.1 201 Created</status>
        </response>
        <response>
            <href>http://example.com/file2.txt</href>
            <status>HTTP/1.1 400 Bad Request</status>
        </response>
    </multistatus>
    

    Příklad 2: Aktualizace několika zdrojů najednou

    Popis scénáře

    Klient chce aktualizovat informace o několika uživatelských účtech v jedné operaci. Server může vrátit odpověď se stavem pro každý účet.

    Příklad požadavku a odpovědi

    PUT /users HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    [
        {"id": 1, "name": "Nový Jméno 1"},
        {"id": 2, "name": "Nový Jméno 2"}
    ]
    
    HTTP/1.1 207 Multi-Status
    Content-Type: application/xml
    
    <multistatus>
        <response>
            <href>http://example.com/users/1</href>
            <status>HTTP/1.1 200 OK</status>
        </response>
        <response>
            <href>http://example.com/users/2</href>
            <status>HTTP/1.1 404 Not Found</status>
        </response>
    </multistatus>
    

    Příklad 3: Získání stavů z různých zdrojů

    Popis úkolu

    Klient potřebuje zkontrolovat stavy více zdrojů a server vrátí odpověď s informacemi o každém z nich.

    Příklad požadavku a odpovědi

    GET /status-check HTTP/1.1
    Host: example.com
    
    HTTP/1.1 207 Multi-Status
    Content-Type: application/xml
    
    <multistatus>
        <response>
            <href>http://example.com/resource1</href>
            <status>HTTP/1.1 200 OK</status>
        </response>
        <response>
            <href>http://example.com/resource2</href>
            <status>HTTP/1.1 503 Service Unavailable</status>
        </response>
    </multistatus>
    

    Oprava chyb spojených s kódem 207 v různých programovacích jazycích

    Python

    Příklad kódu s chybou

    import requests
    
    response = requests.post('http://example.com/upload', files={'file': 'data'})
    if response.status_code == 207:
        print("Úspěch")
    else:
        print("Chyba")
    

    Způsoby opravy

    Je nutné zpracovat odpověď jako XML a analyzovat jednotlivé stavy pro každou položku.

    JavaScript (Node.js)

    Příklad kódu s chybou

    const axios = require('axios');
    
    axios.post('http://example.com/upload', data)
        .then(response => {
            if (response.status === 207) {
                console.log("Úspěch");
            }
        })
        .catch(error => {
            console.error("Chyba:", error);
        });
    

    Způsoby opravy

    Je třeba zkontrolovat strukturu odpovědi a správně zpracovat XML pro extrakci jednotlivých stavů.

    PHP

    Příklad kódu s chybou

    $response = file_get_contents('http://example.com/upload');
    if ($http_response_header[0] == "HTTP/1.1 207 Multi-Status") {
        echo "Úspěch";
    }
    

    Způsoby opravy

    Musíte správně analyzovat HTTP hlavičky a zpracovat XML odpověď pro získání stavu jednotlivých zdrojů.

    Diskuze o možných problémech a omezeních

    Možné chyby při použití kódu 207

    Mezi běžné chyby patří nedostatečné zpracování XML odpovědi a ignorování různých stavových kódů pro jednotlivé zdroje.

    Omezení ve formátu odpovědi

    Formát odpovědi je silně závislý na XML, což může být problém pro klienty, kteří nemají potřebné knihovny pro jeho zpracování.

    Doporučení pro optimalizaci požadavků

    • Používejte kompresi pro snížení velikosti dat přenášených v odpovědích.
    • Minimalizujte množství dat, která posíláte v jednom požadavku, aby nedošlo k přetížení serveru.
    • Testujte a monitorujte výkon serveru při používání kódu 207.

    Příklady úspěšného použití kódu 207 v reálných aplikacích

    Služby, které používají kód 207

    Název služby Popis
    Cloud Storage Umožňuje uživatelům nahrávat a spravovat soubory s možností vrátit více stavů pro jednotlivé soubory.
    Hromadné aktualizace databáze Podporuje aktualizaci více záznamů najednou s informacemi o stavu každého záznamu.

    Použivatelské případy a zpětná vazba od vývojářů

    Vývojáři často uvádějí, že použití kódu 207 zjednodušuje proces správy více zdrojů a zvyšuje efektivitu jejich aplikací. Je však nezbytné pečlivě zpracovávat odpovědi a důkladně testovat všechny scénáře použití.