Έχω ένα αίτημα JSON το οποίο αποστέλλω σε μια διεύθυνση URL HTTP.
Θα πρέπει αυτό να αντιμετωπιστεί ως 400
όπου το πεδίο requestedResource
υπάρχει αλλά το "Roman"
είναι μια άκυρη τιμή για αυτό το πεδίο;
[{requestedResource:"Roman"}]
Θα πρέπει να αντιμετωπιστεί ως 400
όπου το πεδίο "blah"
δεν υπάρχει καθόλου;
[{blah:"Roman"}]
Το 400 σημαίνει ότι η αίτηση ήταν κακοσχηματισμένη. Με άλλα λόγια, η ροή δεδομένων που έστειλε ο πελάτης στον διακομιστή δεν ακολούθησε τους κανόνες.
Στην περίπτωση ενός REST API με ωφέλιμο φορτίο JSON, τα 400's συνήθως, και σωστά θα έλεγα, χρησιμοποιούνται για να υποδείξουν ότι το JSON είναι άκυρο με κάποιο τρόπο σύμφωνα με τις προδιαγραφές API για την υπηρεσία.
Με αυτή τη λογική, και τα δύο σενάρια που παρέθεσες θα έπρεπε να είναι 400's.
Φανταστείτε αντί αυτού να επρόκειτο για XML αντί για JSON. Και στις δύο περιπτώσεις, η XML δεν θα περνούσε ποτέ την επικύρωση σχήματος - είτε λόγω ενός μη καθορισμένου στοιχείου είτε λόγω μιας ακατάλληλης τιμής στοιχείου. Αυτό θα ήταν ένα κακό αίτημα. Το ίδιο συμβαίνει και εδώ.
Από w3.org
10.4.1 400 Κακή αίτηση >, Η αίτηση δεν μπόρεσε να γίνει κατανοητή από τον διακομιστή λόγω κακοσχηματισμένου σύνταξη. Ο πελάτης ΔΕΝ ΠΡΕΠΕΙ να επαναλάβει την αίτηση χωρίς τροποποιήσεις.
Σκεφτείτε τις προσδοκίες.
Ως εφαρμογή-πελάτης, περιμένετε να γνωρίζετε αν κάτι πάει στραβά στην πλευρά του διακομιστή. Αν ο διακομιστής πρέπει να πετάξει ένα σφάλμα όταν λείπει το blah
ή η τιμή requestedResource
είναι λανθασμένη, τότε ένα σφάλμα 400 θα ήταν κατάλληλο.