REST中,用户试图访问一条不属于他的资源,返回404还是403?
发布于 12 年前 作者 romboo 4321 次浏览 最后一次编辑是 8 年前

这个资源存在的,返回哪个状态比较合适?如果是返回403,那用户没有登陆或者失效返回的403是不是冲突了?

5 回复

另外,在post或者put成功后,应该返回成功的代码,还是直接返回200?

没有登录的话,返回401,这时候客户端应该要尝试登录,登录后可能就有权限了。如果登录之后还是没有权限访问的话,才是403,客户端再怎么尝试,结果还是一样的。

资源创建成功后,应该返回201。如果是post方式创建的新资源,在Location头里标注新资源的URI。

谢谢,这样果然清晰多了,但其实返回只是要新资源的id就可以了吧,不一定要是url吧,考虑资源的url有时候会变,如原来是api.abc.com/id,后来变成了api.xxx.com/id。 当然另一种做法是返回新的url,然后重新请求这个url,获取所有数据。但这样又多向服务器请求一次,直接返回id就可以了吧。当然也可以返回url,然后截取id,大家觉得呢。

@romboo 资源的URI如果变化了,应该返回301,并且在Location头中标注新的URI。

创建完新资源后,是可以返回数据。如果客户端能够理解数据格式,它可以从中获取id。并且客户端需要刷新资源的内容的时候,可以根据id构造出资源的URI,向这个URI发送get请求来更新内容。但是如果这个资源本来是在www.abc.com/id,后来扩容后改到api.abc.com/id了。这时候就需要更新客户端的代码才行了。 如果你在Location中标明了URI,客户端就不需要知道资源的id,也不需要自己根据id去构造URI,只要照着Location中的URI请求就行了。服务器端的改动不会影响到客户端。

回到顶部