如何实现多个版本的api后端

时间:2011-10-01 10:26:01

标签: django api rest

我正在使用Django来实现类似私有的API,我不确定如何在后端处理不同版本的API。

意思是,如果我有两个版本的API,我的代码是什么样的?我应该有不同的应用程序处理不同的版本?不同的功能应该处理不同的版本或者我应该在一个版本与另一个版本不同时使用if语句吗?

我计划在标题中说明版本。

谢谢

1 个答案:

答案 0 :(得分:3)

您不需要版本REST API。使用REST,版本控制可以在运行时通过人们可能称之为“必须忽略的有效负载扩展规则”或通过内容协商来实现。

'必须忽略有效负载扩展规则'指的是您构建到消息设计中的一个方面。 “必须忽略”意味着处理给定格式的消息的软件必须忽略任何未知的语法结构。这是我们所知道的HTML,以及在没有解析器阻塞的情况下将各种花哨的标签插入HTML页面的原因。

'必须忽略'允许您通过向已发送的内容添加内容来发展服务功能,而无需考虑仅了解旧版本的客户。

内容协商是指HTTP内置机制,用于协商服务器在运行时发送给给定客户端的实际表示。典型的情况是:客户端在请求中发送Accept标头以宣传它们的功能,服务器根据这些功能选择要发送回的表示。但是这个主题也有变化(详见此处:http://www.w3.org/Protocols/rfc2616/rfc2616-sec12.html)。

内容协商允许不兼容的更改,这意味着我可以将我的服务发展为能够发送不兼容的旧版本和新版本,并且基于Accept标头,我的服务将发送相应的版本。

结论:使用这两种方法,您的API保持不变。无需在API级别进行任何版本控制 - 尤其不是经常建议(但完全错误)在URI中包含版本标识符(记住,你在这里做REST,而不是SOAP!)