想象一下一个API,以确定一个人是否选择了他们的精神动物。他们只能有零个或一个精神动物。
目前:
/person/{id}/selectedSpiritAnimal
当他们选择了动物时,返回http 200, {selectedAnimal:mole}
但是当他们没有选择时,它将返回http 404。
这使我的精神动物不满意,因为我们正在表示一个有效的域问题-尚未选择精神动物-作为HTTP错误。
另外,作为一家公司-erm Sprit-Animal-Hampers-R-us,我们想知道某人何时没有选择,以便我们提示他们。
什么是更好的回应:
HTTP 200和 {selectedAnimal:null}
甚至更明确
HTTP 200和 {selectedAnimal:null, spiritAnimalSelected: false}
还是返回404更好?因为很像this image has not yet been uploaded
在线查看图像时将是404。this person has not selected a spirit animal
可能是404
该问题已被提议作为重复项,但是当应用程序配置为不允许该URL表示更改时,该问题解决了一个其他有效的URL。
而在这里,我正在研究在没有资源的情况下有意义的代表资源的方式。也就是说,客户端请求URL是有效的,并且响应是您已成功请求表示没有东西的资源。
因此,这不是“业务逻辑”,而是情况下缺少某物有意义(可能是因为我的许多同事都认为404仍然正确),但是我不确定如何将其映射到规格
很难选择答案。我在这里的谈话和正在进行的工作中多次改变主意。
在这里为我解决的问题是,规范指出4xx是客户犯错的时间。在这种情况下,已告知客户端期望来自selectedSpiritAnimal url的响应,因此不会出错。
我的同事之间的共识是,这是API设计错误的征兆
最好只请求/ person / {id}并返回该人的一组链接关系...那么如果没有给您/ selectedSpiritAnimal链接(当一个人没有选择时),但是您不管怎样都称它为404才有意义。或者您实施部分响应并让/ person / {id}返回更完整的文档,除非客户端请求数据的子集