In keinem Fall ist die "Syntax fehlerhaft". Es sind die Semantik, die falsch sind. Daher ist meiner Meinung nach eine 400 unangemessen. Stattdessen wäre es angebracht, eine 200 zusammen mit einer Art Fehlerobjekt wie { "Fehler": { "Nachricht": "Unbekanntes Anfrage-Schlüsselwort" } }
oder ähnliches zurückzugeben.
Betrachten Sie die Verarbeitungspfade des Clients. Ein Fehler in der Syntax (z.B. ungültiges JSON) ist ein Fehler in der Logik des Programms, anders gesagt ein Fehler irgendwelcher Art, und sollte entsprechend behandelt werden, ähnlich wie z.B. ein 403; mit anderen Worten, etwas Schlechtes ist passiert.
Ein Fehler im Wert eines Parameters hingegen ist ein semantischer Fehler, möglicherweise aufgrund eines schlecht validierten Benutzereingabe. Es ist kein HTTP-Fehler (obwohl es auch ein 422 sein könnte). Der Verarbeitungspfad wäre anders.
Zum Beispiel würde ich in jQuery lieber keinen einzigen Fehlerhandler schreiben müssen, der sowohl mit Dingen wie 500 als auch mit spezifischen semantischen Fehlern der App umgeht. Andere Frameworks, wie z.B. Ember, behandeln auch HTTP-Fehler wie 400er und 500er identisch als große fette Misserfolge, wodurch der Programmierer erkennen muss, was los ist und je nachdem, ob es sich um einen "echten" Fehler handelt oder nicht, verzweigen muss.