我一直在为即将到来的项目生成文档。该项目提供的数据的一个特点是,它将被恢复(或至少大部分数据将被恢复)。
我遇到了(据我所知,非常新的) "Accept-Datetime“HTTP报头。对于启用使用现有接口访问已恢复的数据来说,这看起来是绝对完美的。
我的问题是这个。应将哪种返回类型用于:
编辑:目前,在第二种情况下,我尝试将代码406 -不接受
发布于 2017-12-18 15:55:15
因此,RFC 7089中描述的机制定义了对HTTP1.1规范中定义的内容协商机制的扩展。今天官方支持的内容协商参数是:
这些标头用于通知服务器对特定版本的资源的需求(例如,Accept-Language: de)。HTTP1.1规范定义了服务器在试图请求它不支持的内容类型时可以做什么。在这种情况下,服务器应该用406 (不可接受的)响应来响应。根据规范,406项答复表明:
The resource identified by the request is only capable of generating
response entities which have content characteristics not acceptable
according to the accept headers sent in the request.
这与用户指定他们想要资源的特定实时版本是一致的,但是该版本并不存在。
所以,对于你的第一个问题(在初始日期之前询问日期),你应该用406回答。
对于第二个问题(如何处理非版本化的资源),您可以在请求的时候选择资源状态的含义。
如果您认为非版本化的信息没有时间维度,那么您可以决定它总是成功还是总是失败(同样是406)。
提出“永远成功”的理由,你可以争辩说,非版本化的数据在任何时候都是有效的(如果它没有版本化,那么它永远不会改变)系统定义的假设是,如果数据曾经存在,那么它从你的系统宇宙开始就一直存在。例如,对UUID或序列号这样的不可变属性的请求应该(可能)总是成功的。
如果“406总是失败”,您可以声称,如果用户指定了特定日期,那么她希望获得信息的版本,而且由于所请求的资源没有版本,服务器无法满足请求,因此应该生成错误响应。
我主张一贯失败的做法。
有几件事要注意:
https://softwareengineering.stackexchange.com/questions/195149
复制相似问题