If the URL represents a resource that never existed return 404 Not Found
If the URL represents a resource that is an empty list return an empty list and 200 OK.
Example:
{
total: 0,
items: []
}
If the URL represents a resource that used to exist return 410 Gone.
Regarding Lego Stormtrooper's dialog:
Alien: Computer, please tell me all planets that humans inhabit. GET /planets?inhabitedBy=humans
Computer: 200 OK. { total: 1, items:[{name:'Earth'}] }
Alien: Computer, please tell me about Earth. GET /planets/earth
Computer: 200 OK. {name:'Earth', status: 'Mostly Harmless'}
Alien: Computer, please tell me about all planets humans inhabit, outside the asteroid belt. GET /planets?inhabitedBy=humans&distanceFromSun=lots
Computer: 200 OK. {total:0, items:[] }
Alien: Computer, please destroy Earth. DELETE /planets/earth
Computer: 204 No Content. (or 202 Accepted if it takes some time to destroy Earth)
Alien: Computer, please tell me about Earth. GET /planets/earth
Computer: 410 Gone
Alien: Computer, please tell me all planets that humans inhabit. GET /planets?inhabitedBy=humans
Computer: 200 OK 0 {total: 0, items:[] }
Alien: Victory for the mighty Irken Empire!