REST API的客户端应如何在POST时处理http状态301重定向?

use*_*465 5 rest error-handling http

经过精心设计的应用程序应如何处理301“永久移动”,并在HTTP POST上重定向到静态API?

语境

  • 我们的托管应用程序提供了一个宁静的API
  • 我们有一个广泛的客户,他们在自己的“本地”应用程序中使用我们的静态api [fwiw,已安装在数十个站点上,没有简便的更新方法]
  • 我们正在将应用程序迁移到新的数据中心,在此过程中,我们会将它们(和其他)从“纯文本http”切换为“ ssl加密的https”。[物理位置数据中心固然无关紧要,但是新的数据中心具有更严格的安全规则,因此必须使用https]

  • 我们的前端(haproxy / nginx)将发送301“永久移动”

  • 301重定向保留了查询参数,但丢失了发布数据

我知道“平安API的应该是永久性的”,但是,merde到达(这还是发生在法国) -帝国崩溃,柏林墙落,Oracle收购的Sun等。

问题

他们的应用程序对我们宁静的api进行HTTP post调用。当前端返回“ http status 301”时,他们的应用程序不会“重新发布”到新的url,并且更新失败。

问题

  • 错误处理应如何处理301和其他http状态?(伪代码就足够了)
  • 我们的“前端”应该为“ 301”做些不同的事情吗?

Pal*_*tim 7

为了在“纯 REST 式”的意义上满足您的“精心设计”的要求,客户端应该将请求重新发送到新的 URI。响应代码 301 表示资源已移动,无法用于完成请求,因此实际上没有回退位置。

如果客户端尝试重新发布,但丢失了数据,那就是客户端错误。客户端的“正确”行为因您的要求而异:它可以将重定向视为可恢复的错误情况,并透明地重新发布;它可以在指示用户更新端点时重新发布;否则它可能会失败并显示适当的错误消息。