views:

61

answers:

2

Hi All, We are in the middle of a ongoing discussion about how to handle REST exceptions.

Response Content type : JSON

Two solutions we have:

1) Throw all the unchecked exceptions as a JSON response.

2) Send Request Invalid Response code.

Arguments:

When its a error, why return JSON? Just send a invalid response code.

Counter Argument:

Response code are too technical to handle for normal developers.

Whats your say??

+4  A: 

For a JSON API I recently developed I do both. I always respond with valid JSON (well, assuming I respond at all). If I detect an invalid request, I use status 400. If I detect a server error (which I don't believe is caused by an invalid request), I use a 5xx status. The JSON object contains a special key that is only set for errors, with a string value.

I think this is a good solution that respects REST principles, and can be used in multiple ways. The same solution is used by some other JSON APIs, such as Yahoo Search. Try http://search.yahooapis.com/ImageSearchService/V1/imageSearch?appid=YahooDemo&output=json .

Matthew Flaschen
+1: With a RESTful use of HTTP you absolutely must leverage HTTP response codes. Additional information can be returned in the representation.
Jim Ferrans
+1  A: 

Use error codes like for HTTP. So 50* for any exception cause by some internal problem. And 40* for . Avoid using your own defined codes as far as its possible. The idea is to have a "uniform" interface.

In general. 201 for success without sending any content 200 for success with a json representation of the resource And if its not a successful operation return appropriate response code. You can choose to optionally return a json. To simplify things you can have a common format (json) for all error responses.

http://en.wikipedia.org/wiki/REST is a must read before you freeze on your api specs.

neal aise
"201 for success without sending any content." 201 is created, so it should only be used when "a new resource [is] created", not for general success. You might be thinking of 204, "No Content"
Matthew Flaschen
oops! right. thanks for the correction!
neal aise