WP_REST_Response vs. WP_Error

Lesezeit: 2 Minuten

Benutzer-Avatar
Dmitri Gamolin

Ich bin etwas verwirrt darüber, wie Fehler in der REST-API von WordPress behandelt werden. In ihren Beispielen schlagen sie vor, zu verwenden WP_Error um Fehler zurückzugeben, aber WP_REST_Response hat den HTTP-Statuscode als zweiten Parameter, was es für meinen Geschmack kürzer und etwas sauberer macht.

Also vergleiche ich diese Art, einen Fehler zurückzugeben:

return new WP_REST_Response(array('error' => 'Error message.'), 400);

Mit diesem:

return new WP_Error('rest_custom_error', 'Error message.', array('status' => 400));

Mit der ersten Option kann ich nur den Fehlertext in meiner Antwort haben und es reicht mir. Die Antwort würde also so aussehen:

{“error”:”Fehlermeldung.”}

Beim zweiten wird es ausführlicher:

{“code”:”rest_custom_error”,”message”:”Fehlermeldung.”,”data”:{“status”:403}}

Aber ich muss auch den Fehlercode (erster Parameter) angeben, was meiner Front-End-Implementierung keinen Vorteil bringt. Abgesehen von der Syntax interessieren mich Unterschiede in Bezug auf Leistung, Sicherheit und zukunftssichere Faktoren.

Gibt es also einen Grund, das eine dem anderen vorzuziehen als persönliche Vorlieben?

  • Das verwirrt mich auch. Hast du es gelöst?

    – Jaakko Karhu

    27. August 2019 um 8:51 Uhr

  • Es hat wahrscheinlich damit zu tun, wie WP die Antworten behandelt. Verwenden Sie einfach die zweite Variante.

    – Dmitri Gamolin

    28. August 2019 um 14:22 Uhr

Ich gehe wie folgt vor:

WP_REST_Response // Used when endpoint code runs just fine but needs to 
                 // tell the client about some other downstream error (e.g. 4xx)
WP_Error // Used when endpoint code has an issue and needs to tell you
         // it didn't compute or couldn't find resources etc (e.g. 5xx)

Soweit ich das beurteilen kann, ändert WordPress die Statuscodes der Antworten auf unvorhersehbare Weise. Das ist dumm. Wenn Sie beispielsweise eine WP_REST_RESPONSE mit dem Status 400 erstellen, wird sie tatsächlich als Status 200 mit „status:400“ als Daten im Text gesendet.

Was ich tue: Erkennen, dass der WordPress-Kern geistig zurückgeblieben ist. Verwenden Sie einfach PHP-Antwortfunktionen:

http_response_code(400);
exit;

Wenn Sie mir sagen, dass ich falsch liege, erläutern Sie bitte den Vorteil der Verwendung dieser beiden Funktionswrapper. Ich sehe den Vorteil, wenn Sie für Automattic arbeiten und Regressionen im Kern selbst erstellen. Wenn Sie ein Plugin- oder Theme-Entwickler sind, [and you’re assuming core works] Diese Funktionen sollten vermieden werden, da sie keinen Nutzen haben.

1380300cookie-checkWP_REST_Response vs. WP_Error

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy