Ik'm bouw een toepassing met een REST-gebaseerde API en ben op het punt gekomen waar ik'm statuscodes specificeer voor elk verzoek.
Welke statuscode moet ik sturen voor verzoeken mislukte validatie of waar een verzoek probeert toe te voegen een duplicaat in mijn database?
Ik'heb gekeken via http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html maar geen van hen lijkt juist.
Is er een gemeenschappelijke praktijk bij het verzenden van statuscodes?
Voor invoer validatie fout: 400 Bad Request + uw optionele beschrijving. Dit wordt voorgesteld in het boek "RESTful Web Services". Voor dubbel indienen: 409 Conflict
Update juni 2014
De relevante specificatie was voorheen RFC2616, die het gebruik van 400 (Bad Request) vrij beperkt gaf als
Het verzoek kon niet worden begrepen door de server vanwege een misvormde syntaxis
Men zou dus kunnen redeneren dat het ongeschikt was voor semantische fouten. Maar nu niet meer; sinds juni 2014 geeft de relevante standaard RFC 7231, die de vorige RFC2616 vervangt, het gebruik van 400 (Bad Request) ruimer als
de server kan of zal het verzoek niet verwerken vanwege iets dat wordt opgevat als een fout van de client
Je moet zeker een meer gedetailleerde uitleg geven in de response headers en/of body (bijv. met een custom header - X-Status-Reason: Validation failed
).
Ik adviseer statuscode 422, "Unprocessable Entity".
11.2. 422 Onverwerkbare Entiteit
De statuscode 422 (Unprocessable Entity) betekent dat de server het inhoudstype van de request entiteit begrijpt (vandaar dat een 415(Unsupported Media Type) statuscode ongepast is), en dat de syntax van de request entiteit correct is (vandaar dat een 400 (Bad Request) statuscode ongepast is), maar niet in staat was om de instructies in de request entiteit te verwerken. Deze foutconditie kan zich bijvoorbeeld voordoen indien een XML-verzoek welgevormde (d.w.z. syntactisch correcte), maar semantisch foutieve XML-instructies bevat.