所以在谷歌上搜索一下,似乎普遍的共识是,在睡觉URI中嵌入版本号是一种糟糕的做法,也是一个糟糕的 idea .

尽管如此,还是有强烈的支持者支持这一点.
例如Best practices for API versioning?

我的问题是关于如何实现提议的解决方案,即使用Django-睡觉框架中的Accept头/内容协商来实现这一点.

It looks like content negotiation in the framework,
http://django-rest-framework.org/api-guide/content-negotiation/ is already configured to automatically return intended values based on accepted MIME types. If I start using the Accept header for custom types, I'll lose this benefit of the framework.

在框架中有没有更好的方法来实现这一点?

推荐答案

执行此操作的一种方法是将版本指定为媒体类型的一部分.

这就是GitHub currently do for their API.

您还可以在Accept标头中包含媒体类型参数,例如Accept: application/json; version=beta,它将与JSONRenderer成功匹配.然后,您可以根据接受的媒体类型对视图进行编码,使其行为有所不同,请参见here.

API中的版本控制有很多不同的模式,我不会说围绕正确的方法有任何很大的共识,但这是一种合理的可能性.


Update Jan 2015:3.1.0版本将提供更好的版本控制支持.请参阅[本请求]

Update March 2015:版本控制API are now available的文档.

(https://github.com/tomchristie/django-rest-framework/pull/2285)了解更多详细信息.

Django相关问答推荐

仅更新模型中的特定字段.Model Django

如何在Django表单中传递self.请求数据?

如何在Django中将可选参数传递给视图?

如何连接到 docker 容器中的 postgres 数据库?

Django - 是否可以为查询集预取单个字段的多个过滤器?

Django 有脚手架吗?

在 settings.py 中指定 Django 测试数据库名称

何时在 django 中使用 pre_save、save、post_save?

未捕获的类型错误:$(...).datepicker is not a function(anonymous function)

Django ModelForm 没有指定模型类

Django:创建索引:非唯一,多列

是否可以将 FastAPI 与 Django 一起使用?

django 有条件地过滤对象

Django UrlResolver,在运行时添加 url 进行测试

Django:显示在每个页面上加载页面所花费的时间

Django表单集:首先需要?

django 管理员操作而不 Select 对象

Django - 一起为 2 个或更多字段创建唯一的数据库约束

如何获取经过身份验证的用户列表?

Django:DoesNotExist从何而来?