我正在升级REST API端点,并且我想在客户端调用不赞成使用的端点时通知它们。
我应在响应中使用什么标题,并带有一条消息,标题为“已弃用此API版本,请查阅最新文档以更新您的端点”
Answers:
我不会更改状态代码中的任何内容以向后兼容。我会在响应中添加“警告”标题:
Warning: 299 - "Deprecated API"
您还可以将发出警告的“ Agent”指定为“-”,并在warn-text中更加明确:
Warning: 299 api.blazingFrog.com "Deprecated API: use betterapi.blazingFrog.com instead. Old API maintained until 2015-06-02"
在此处指定警告标头:https : //tools.ietf.org/html/rfc7234#section-5.5。警告代码299是通用的,“不赞成使用”不是标准的。
您必须告诉API客户端记录HTTP警告并对其进行监视。
到目前为止,我从未使用过它,但是当我的公司在Rest API中变得更加成熟时,我将对其进行集成。
编辑(2019-04-25):正如@Harry Wood提到的那样,Warning标头位于文档中与缓存相关的章节中。但是,RFC很明确
Warnings can be used for other purposes, both cache-related and otherwise.
如果您喜欢其他方法,则此草稿https://tools.ietf.org/html/draft-dalal-deprecation-header-00建议使用新的标头“ Deprecation”。
Date
标头相同:"Thu, 02 Apr 2015 12:25:32 GMT"
。
Warning
标头确实可以很好地用作描述过时的自由文本位置。其他答案中提到的Deprecation
和Sunset
标头似乎是一种新兴的标准解决方案,用于以更严格的,更可能是机器可读的方式描述过时问题。
Warning
标头不只与缓存有关。本Warning
节中的第一句话是“警告可以用于与缓存相关或其他目的的其他目的。”
您可以使用410(Gone)。
这是W3C的状态代码定义对其进行描述的方式:
410(已去)
请求的资源在服务器上不再可用,并且未知转发地址。可以认为这种情况是永久的。具有链接编辑功能的客户端应在用户批准后删除对Request-URI的引用。如果服务器不知道该条件是否永久存在,或者无法确定该条件是否永久存在,则应改用状态代码404(未找到)。除非另有说明,否则此响应是可缓存的。
410响应主要用于通过通知接收者资源有意不可用以及服务器所有者希望删除指向该资源的远程链接来辅助Web维护任务。对于限时促销服务和属于不再在服务器站点工作的个人的资源而言,此类事件很常见。不必将所有永久不可用的资源标记为“已消失”,也不必将标记保留任何时间长度-服务器所有者可以自行决定。
410 Gone
这与弃用无关,而与不再可用的方法有关。正如@BenC所说,更好的方法是使用警告标头
我本想/已经放弃了301(永久移动)300系列代码应该告诉客户他们有行动要做。
我建议您提供一个207 Multi-Status
响应,表明它是成功的响应,但它也可能具有第二个已过时的状态。
Deprecation
标头开始(不幸的是,客户端可能会忽略该标头),然后再使用此207代码,然后再移动301,最后再消失410!
完善@dret的响应。有两个相关的HTTP标头用于弃用:Deprecation
(https://tools.ietf.org/html/draft-dalal-deprecation-header-00)和Sunset
。
要通知用户计划中的弃用,Deprecation
应使用HTTP标头。这表明该端点将在将来的某个时间删除。它还允许您指出宣布日期,并描述其他资源。
要通知用户有关已弃用资源的计划停用日期,Sunset
除“弃用”标头外,还应使用该标头。这在第5节https://tools.ietf.org/html/draft-dalal-deprecation-header-00#section-5中进行了描述。
草案#11 https://tools.ietf.org/html/draft-wilde-sunset-header-11所述的Sunset
报头阐明这一方面以及第1.4节https://tools.ietf.org/html/draft-wilde -sunset-header-11#section-1.4。
有一个HTTP标头字段Sunset
,用于指示即将淘汰的资源。https://tools.ietf.org/html/draft-wilde-sunset-header处于成为RFC的最后阶段。理想情况下,您的API应该记录将要使用的API Sunset
,以便客户端可以根据需要进行查找并采取行动。
Date
与同一条消息中的值不同,则接收者必须排除警告值。。。之前。。。使用消息。”