Inhoud

    Serverrespons 409 Conflict

    HTTP-statuscode 409 (Conflict)

    HTTP-statuscode 409 geeft aan dat een verzoek niet kan worden uitgevoerd vanwege een conflict met de huidige status van de resource. Dit kan zich voordoen wanneer geprobeerd wordt een resource te wijzigen die al is aangepast of gemaakt door een andere gebruiker of proces. Het is cruciaal om te begrijpen hoe deze statuscode correct te verwerken om een goede interactie tussen client en server te waarborgen.

    409 - Conflict

    Oorzaken van statuscode 409

    • Gegevensconflict: Poging om een record bij te werken dat is veranderd sinds de laatste keer dat het werd opgehaald.
    • Poging om een resource te creëren: Dit gebeurt wanneer geprobeerd wordt een resource met een identiteitskenmerk te maken dat al bestaat.
    • Conflicten in bedrijfslogica: Bijvoorbeeld bij het proberen uit te voeren van acties die in strijd zijn met de regels.

    Praktische voorbeelden

    1. Bijwerken van een record in een database:
      • Voorbeeld: Gebruiker A wijzigt een record, waarna gebruiker B probeert hetzelfde record bij te werken zonder op de hoogte te zijn van de wijzigingen van gebruiker A. De server retourneert status 409.
      • Oplossing: Implementeer een mechanisme voor blokkering of versiebeheer om gebruikers te informeren over conflicten.
    2. Creëren van een duplicaat resource:
      • Voorbeeld: Een gebruiker probeert een nieuw account aan te maken met een al bestaand e-mailadres. De server retourneert status 409.
      • Oplossing: Controleer op duplicaten voordat een nieuwe resource wordt aangemaakt en geef een duidelijke foutmelding terug.
    3. Conflict in transactieprocessen:
      • Voorbeeld: Twee transacties proberen tegelijkertijd dezelfde resource te wijzigen, wat leidt tot een conflict.
      • Oplossing: Gebruik mechanismen voor transactiebeheer en wachtrijen om verzoeken sequentieel te verwerken.

    Fout 409 oplossen in verschillende programmeertalen

    Programmeertaal Voorbeeldcode
    Python met Flask
    from flask import Flask, jsonify, request
    
    app = Flask(__name__)
    
    @app.route('/update', methods=['POST'])
    def update_resource():
        data = request.json
        if resource_is_modified(data['id']):
            return jsonify({'error': 'Resource is aangepast'}), 409
        # Resource bijwerken
        return jsonify({'success': 'Resource bijgewerkt'}), 200
                
    Java met Spring
    @PostMapping("/update")
    public ResponseEntity updateResource(@RequestBody Resource resource) {
        if (isResourceModified(resource.getId())) {
            return ResponseEntity.status(HttpStatus.CONFLICT).body("Resource is aangepast");
        }
        // Resource bijwerken
        return ResponseEntity.ok("Resource bijgewerkt");
    }
                
    JavaScript met Node.js en Express
    app.post('/update', (req, res) => {
        const resourceId = req.body.id;
        if (isResourceModified(resourceId)) {
            return res.status(409).send('Resource is aangepast');
        }
        // Resource bijwerken
        res.send('Resource bijgewerkt');
    });
                

    Het correct verwerken van statuscode 409 (Conflict) is een essentieel aspect van de ontwikkeling van API's, vooral wanneer het gaat om interacties met resources die door meerdere gebruikers of processen kunnen worden gewijzigd. Het implementeren van mechanismen om conflicten te beheren, kan de gebruikerservaring verbeteren en gegevensverlies voorkomen.