因此,围绕Google进行搜索似乎是普遍的共识,即在REST URI中嵌入版本号是一个坏习惯,也是一个坏主意。
即使在SO上,也有很强的支持者支持这一点。 例如API版本控制的最佳做法?
我的问题是关于如何完成在django-rest-framework中使用accept标头/内容协商的建议解决方案。
看起来框架中的内容协商 已经完成, http://django-rest-framework.org/api-guide/content-negotiation/已配置为根据接受的MIME类型自动返回预期值。如果我开始对自定义类型使用Accept标头,那么我将失去框架的这种优势。
在框架中是否有更好的方法来实现这一目标?
一种方法是将版本控制指定为媒体类型的一部分。
这就是GitHub 当前对其API所做的工作。
你还可以在你的接受标头中包含媒体类型参数,例如Accept: application/json; version=beta,可以成功匹配JSONRenderer。然后,你可以根据自己接受的媒体类型对视图进行编码,使其行为有所不同,请参见此处。
Accept: application/json; version=beta
JSONRenderer
API的版本控制有很多不同的模式,我不会说关于正确方法的共识很大,但这是一种合理的可能性。