我正在实现一个API,试图坚持一个Restful设计。我们有一个用例来接受POST请求,创建资源并将URL返回给客户端。客户端将希望应用一些业务逻辑来确定是否应从该URL检索资源。在我看来,按照RFC 7231的规定,返回码应该是303:
用户代理可以执行针对该URI(如果使用HTTP,则为GET或HEAD请求)的检索请求,该请求也可能会被重定向,并显示最终结果作为对原始请求的答案
但是,同事不同意并提出200响应,因为不应该要求客户端遵循重定向来获取资源-这取决于他们。 RFC声明
如果提供了位置标头字段(第7.1.2节),则 用户代理可以自动将其请求重定向到URI 即使特定状态也由“位置”字段值引用 代码不被理解。自动重定向需要完成 注意4.2.1节中定义的不安全的方法, 因为用户可能不希望重定向不安全的请求
我读这句话是说重定向响应将决定是否重定向到客户端。我的同事认为,由于浏览器和客户端会自动重定向,因此我们不应指示他们这样做。这是正确的吗?
答案 0 :(得分:1)
REST API的常规约定是在POST之后不重定向,因此API无需使用PRG模式。
HTTP状态代码应该反映已完成的操作(200,201,202等),而不是重定向状态代码,因为这对API的使用者更友好。
浏览器确实确实follow redirects,所以通过进行重定向,您将更难从浏览器使用API-他们无法决定不遵循重定向。