Inhoud

    Serverrespons 207 Multi-Status

    HTTP-statuscode 207 (Multi-Status)

    HTTP-statuscode 207, ook wel Multi-Status genoemd, wordt gebruikt om meerdere statusinformatie in één enkel antwoord te communiceren. Dit is bijzonder nuttig wanneer een enkele aanvraag informatie over de staat van meerdere bronnen moet teruggeven. In deze sectie worden de kenmerken van deze statuscode, het gebruik ervan en enkele praktische voorbeelden in verschillende programmeertalen behandeld.

    207 - Multi-Status

    Kort overzicht van statuscode 207

    • Definitie en doel: De 207-statuscode geeft aan dat de server meerdere statusinformatie over verschillende bronnen in een enkele response stuurt.
    • Wanneer de code 207 te gebruiken: Deze statuscode is ideaal in situaties waarin een client een batchverzoek doet om informatie over meerdere bronnen tegelijk op te vragen of te wijzigen.
    • Structuur van een antwoord met code 207: De response bevat doorgaans een XML- of JSON-structuur die de statusinformatie van de verschillende bronnen beschrijft.

    Praktische voorbeelden van het gebruik van code 207

    Voorbeeld 1: Verwerken van meerdere bestanden

    Bij het uploaden van meerdere bestanden kan een server de status van elk bestand afzonderlijk teruggeven.

    
    POST /upload HTTP/1.1
    Host: example.com
    Content-Type: multipart/form-data
    
    --boundary
    Content-Disposition: form-data; name="file1"; filename="file1.txt"
    
    Inhoud van bestand 1
    --boundary
    Content-Disposition: form-data; name="file2"; filename="file2.txt"
    
    Inhoud van bestand 2
    --boundary--
    
    

    Antwoord:

    
    HTTP/1.1 207 Multi-Status
    Content-Type: application/xml
    
    
        
            uploaded
            file1.txt
        
        
            error
            file2.txt
            Bestand te groot
        
    
    
    

    Voorbeeld 2: Gelijktijdige updates van meerdere bronnen

    Als een client meerdere bronnen tegelijk wil bijwerken, kan de server de status van elk updateproces teruggeven.

    
    PATCH /resources HTTP/1.1
    Host: example.com
    Content-Type: application/json
    
    {
        "resources": [
            {"id": 1, "name": "Resource A"},
            {"id": 2, "name": "Resource B"}
        ]
    }
    
    

    Antwoord:

    
    HTTP/1.1 207 Multi-Status
    Content-Type: application/json
    
    {
        "responses": [
            {"id": 1, "status": "updated"},
            {"id": 2, "status": "not found"}
        ]
    }
    
    

    Voorbeeld 3: Verkrijgen van statussen uit verschillende bronnen

    Een client kan informatie over de status van verschillende bronnen aanvragen in één enkele call.

    
    GET /statuses HTTP/1.1
    Host: example.com
    
    

    Antwoord:

    
    HTTP/1.1 207 Multi-Status
    Content-Type: application/json
    
    {
        "statuses": [
            {"id": 1, "status": "active"},
            {"id": 2, "status": "inactive"},
            {"id": 3, "status": "pending"}
        ]
    }
    
    

    Fouten oplossen met code 207 in verschillende programmeertalen

    Python

    Een voorbeeld van een foutieve implementatie.

    
    # Foutieve code
    response = requests.patch('http://example.com/resources', json=data)
    if response.status_code == 207:
        print('Update succesvol!')
    else:
        print('Fout bij update!')
    
    

    Oplossing:

    
    # Verbeterde code
    response = requests.patch('http://example.com/resources', json=data)
    if response.status_code == 207:
        for res in response.json()['responses']:
            print(f"Resource ID {res['id']} heeft status {res['status']}")
    else:
        print('Fout bij update!')
    
    

    JavaScript (Node.js)

    Voorbeeld van een foutieve implementatie.

    
    const axios = require('axios');
    
    axios.patch('http://example.com/resources', data)
        .then(response => {
            if (response.status === 207) {
                console.log('Update succesvol!');
            }
        })
        .catch(error => {
            console.error('Fout:', error);
        });
    
    

    Oplossing:

    
    axios.patch('http://example.com/resources', data)
        .then(response => {
            if (response.status === 207) {
                response.data.responses.forEach(res => {
                    console.log(Resource ID ${res.id} heeft status ${res.status});
                });
            }
        })
        .catch(error => {
            console.error('Fout:', error);
        });
    
    

    PHP

    Een voorbeeld van een foutieve implementatie.

    
    $response = file_get_contents('http://example.com/resources');
    if ($http_response_header[0] == 'HTTP/1.1 207 Multi-Status') {
        echo 'Update succesvol!';
    }
    
    

    Oplossing:

    
    $response = file_get_contents('http://example.com/resources');
    if (strpos($http_response_header[0], '207') !== false) {
        $data = json_decode($response, true);
        foreach ($data['responses'] as $res) {
            echo "Resource ID {$res['id']} heeft status {$res['status']}\n";
        }
    }
    
    

    Bespreking van mogelijke problemen en beperkingen

    • Mogelijke fouten bij het gebruik van code 207: Onjuiste parsing van de response of het niet herkennen van de statuscode kan leiden tot verwarring bij de client.
    • Beperkingen in het responseformaat: Niet alle clients kunnen correct omgaan met complexe of geneste JSON/XML-structuren.
    • Aanbevelingen voor optimalisatie van verzoeken: Zorg voor duidelijke documentatie en gebruik standaardformaten voor responses.

    Voorbeelden van succesvol gebruik van code 207 in echte toepassingen

    • Diensten die code 207 gebruiken: Cloudopslagservices die batchbestanden uploaden of -bijwerken.
    • Gebruikerscases en feedback van ontwikkelaars: Veel ontwikkelaars waarderen de mogelijkheid om meerdere statusberichten te ontvangen in één enkele response, wat de efficiëntie van API-aanroepen verhoogt.