Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WP_REST_Response vs WP_Error

I'm a bit confused about how errors are handled in Wordpress's REST API. In their examples, they suggest using WP_Error to return errors, but WP_REST_Response has the HTTP status code as a second parameter, which makes it shorter and somewhat cleaner to my taste.

So I'm comparing this way of returning an error:

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

With this one:

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

With the first option, I can have just the error text in my response and it's enough for me. So the response would look like so:

{"error":"Error message."}

With the second one it's more detailed:

{"code":"rest_custom_error","message":"Error message.","data":{"status":403}}

But I also need to specify the error code (first parameter), which doesn't give any advantage to my front-end implementation. Other than the syntax, I'm curious about differences in performance, security and future-proof factors.

So is there any reason to prefer one over the other than personal preferences?

like image 682
Dmitriy Gamolin Avatar asked May 02 '18 13:05

Dmitriy Gamolin


2 Answers

I do as follows:

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)
like image 55
ed2 Avatar answered Sep 29 '22 14:09

ed2


As far as I can tell, WordPress changes the status codes of the responses in unpredictable ways. This is dumb. For instance, if you create a WP_REST_RESPONSE with status 400, it actually sends it as status 200 with "status:400" as data in the body.

What I do: Recognize that WordPress core is mentally retarded. Just use PHP response functions:

http_response_code(400);
exit;

If you tell me I'm wrong, please explain the benefit of using these two function wrappers. I see the benefit if you work for Automattic and are creating regressions in core itself. If you're a plugin or theme dev, [and you're assuming core works] these functions should be avoided as having no use.

like image 22
John Dee Avatar answered Sep 29 '22 14:09

John Dee