Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Best way to return error messages on REST services?

Tags:

rest

I've been looking at examples of REST API's like Netflix http://developer.netflix.com/docs/REST_API_Reference#0_59705 and Twitter and they seem to place error messages in the statusText header response instead of the responseText. We're developing an internal RESTful api and I am arguing for sending custom statusText messages and ignoring the responseText.

For the scope of our app, we're returning error 400 when the user has tried doing something they aren't supposed to, and the only error messages that will be updated in the UI for the user will be delivered with 400. I am of the belief that the message should be sent as a modified statusText but one of the engineers (who knows a bit less about REST than me) is arguing for sending it in the responseText.

What's the best way to go?

like image 728
Geuis Avatar asked Jul 03 '09 00:07

Geuis


People also ask

How do you handle errors in rest?

The simplest way we handle errors is to respond with an appropriate status code. Here are some common response codes: 400 Bad Request – client sent an invalid request, such as lacking required request body or parameter. 401 Unauthorized – client failed to authenticate with the server.

How Restful Web Services display custom error messages?

To throw a custom error in your REST API, do the following: Create a User Exception for the custom error you want to throw. Go to the flow of the REST API method or the callback (such as OnAuthentication or OnRequest) where you want to throw the error and add a Raise Error element.

Should I return 500 API?

It means that the server encountered an unexpected condition that prevented it from fulfilling the request. This error is usually returned by the server when no other error code is suitable.

What REST API should return?

The API should always return sensible HTTP status codes. API errors typically break down into 2 types: 400 series status codes for client issues & 500 series status codes for server issues. At a minimum, the API should standardize that all 400 series errors come with consumable JSON error representation.


2 Answers

HTTP defines that you should put a descriptive error message in the response entity body, aka responseText.

statusText is not rendered or processed by any client.

I'd use the status text for the error message type, aka 400 Client Error, and the body for a description of the problem that can be rendered to the user, in whatever the format the client may be able to process.

Edit: Note that since then, a new standardised format exists to communicate in a standard fashion error details back to the client, which you can find at https://www.rfc-editor.org/rfc/rfc7807 and which I would recommend.

like image 64
SerialSeb Avatar answered Oct 13 '22 14:10

SerialSeb


I think you're right, the general approach is use the existing error mechanism built into HTTP.

In general, try to map your errors to existing HTTP errors, for example if they request something they don't have permission to, return a 403 error.

If they request something that doesn't exist, return a 404.

  • Alex
like image 27
Alex Black Avatar answered Oct 13 '22 13:10

Alex Black