Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What status code should I response with when there is no data found in my database

I am wondering what status code would I response with in my else statement from the code below:

       if (album) {
            res.status(200).json({error: false, data: {channel_id: album.attributes.channel_id, id: album.id}});
        } else {
            res.status(200).json({error: false, data: {message: 'There is not album found with this name'}});
        }

I don't want to leave both of them 200 as I want from front end to manage messaged thru status code, for ex if it returns 200 I would say "Created Successfully" while in else case I would display "No data found".

What is your suggestion?

like image 287
Lulzim Avatar asked Nov 09 '22 17:11

Lulzim


1 Answers

"No data found" should be 404.

"Created Successfully" should be 201.

For the 201 you should also specify a Location header for where another request can access the new resource.

Refs:
201 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2
404 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.5

UPDATE:

I thought I'd expand on this, because the comments below point to thought processes I've battled with myself.

GET /some/thing responding 404 Not Found may mean a database entity not found, but could also mean there is no such API end point. HTTP itself doesn't do much to help differentiate these cases. The URL represents a resource. It's not a thing in itself to be considered differently from the thing it represents.

Some APIs respond 400 when a request is made to a non-existant endpoint, but personally I don't like this as it seems to contradict the way web servers respond to normal resource requests. It could also confuse developers building client applications, as it suggests something is wrong in the HTTP transport rather than in their own code.

Suppose you decide to use 404 for missing database entities and 400 for what you consider bad requests. This may work for you, but as your application grows you'll uncover more and more scenarios that simple status codes just can't communicate on their own. And this is my point..

My suggestion is that all API responses carry meaningful data in the body. (JSON or XML, or whatever you're using). A request for an invalid url may look like:

HTTP/1.1 404 Not Found

{ "error": "no_endpoint", "errorText":"No such API end point" }
like image 169
Tim Avatar answered Dec 25 '22 18:12

Tim