Rest 当路由未在服务器上实现时,它应该返回404还是501?

Rest 当路由未在服务器上实现时,它应该返回404还是501?,rest,http,http-status-code-404,http-status-codes,Rest,Http,Http Status Code 404,Http Status Codes,当某些路由尚未实现且不存在资源时,我总是返回404。例如,如果我有一个API返回/API/people上的人,如果我试图在/API/animals上获取一个对象,我将返回404 我的一个同事说404只用于找不到的资源,比如如果我尝试获取/api/people/100,但是没有ID为100的人。对于/api/动物,他将返回501 对我来说,501的意思是当我有一个不支持其中一个方法的路由时,比如如果我可以获取/api/people/3但不能删除它 我决定看看: 404 Not Found状态代码表

当某些路由尚未实现且不存在资源时,我总是返回404。例如,如果我有一个API返回/API/people上的人,如果我试图在/API/animals上获取一个对象,我将返回404

我的一个同事说404只用于找不到的资源,比如如果我尝试获取/api/people/100,但是没有ID为100的人。对于/api/动物,他将返回501

对我来说,501的意思是当我有一个不支持其中一个方法的路由时,比如如果我可以获取/api/people/3但不能删除它

我决定看看:

404 Not Found状态代码表示源服务器未找到目标资源的当前表示形式,或者不愿意透露存在该表示形式。404状态代码并不表明这种缺乏代表性是暂时的还是永久的;如果源服务器(可能通过一些可配置的方式)知道状态可能是永久性的,那么410 Gone状态代码比404更可取

501未实现状态代码表示服务器不支持满足请求所需的功能。当服务器无法识别请求方法并且无法为任何资源支持该方法时,这是适当的响应

对我来说,规范似乎有点模棱两可。同时,有争议的是,源服务器404没有找到/api/animals,而且源服务器没有实现填充请求501的方法


在这种情况下,最合适的返回状态码是什么?

如果你走进书店,让柜台后面的人从书架上拿最好的100块蛋糕,而这本书没有存货,他们会返回并礼貌地说我很抱歉找不到那本书。在图书查找系统中自动执行该操作,它将返回404

书店经理不会出现,而是找你的书的人告诉你,恐怕我们不支持找那本书,因为我们的员工只能找我们有501本的书


如果你走进书店,让柜台后面的人给你买一台割草机,他们会礼貌地回答:对不起,我不知道怎么做。那将是一个501。如果你让书店里的人把你刚在书架上看到的一本书扔掉,那也是501

404是,好的,我知道如何得到它,但它不在那里。501是WTF!你认为这是什么地方

404是否永久取决于回答问题的内容。如果它是一个RESTAPI,它可能会返回JSON状态,比如说这本书已经脱销,但正在订购,可能还有一个到期日

当试图让书商扔掉书架上的一本书时,它是501的真正原因是,如果他们只是说404,你会说,它就在那里!。他们需要说明他们不能那样做的真正原因。他们没有任何商业政策允许他们在不购买书籍的情况下随意扔掉书籍

因此,从技术上讲,仪器就在那里,他们可以走到书跟前,抓住它,但由于政策尚未实施,他们只能停在501上


好的,我知道如何将REST url转换为功能,这就是我知道您想要什么功能的方式,但是,嘿,我们这里只与人打交道,501。

如果您只实现了/api/people,而有人要求/api/animal,我会说那是501,没有实现。/api/使您能够访问尚未实现的资源