当然视图集别忘了在 router 中注册:
blogproject/urls.py # 仅用于 API 版本管理测试 router.register( r"api-version", blog.views.ApiVersionTestViewSet, basename="api-version" )这相当于一次接口版本升级,我们再加入 v2 命名空间的接口:
urlpatterns = [ path("api/v1/", include((router.urls, "api"), namespace="v1")), path("api/v2/", include((router.urls, "api"), namespace="v2")), ]可以看到,包含的 URL 都是一样的,只是 namespace 是 v2。
来测试一下效果,启动开发服务器,先访问版本号为 v1 的测试接口,请求返回结果如下,可以看到如期返回了 v1 版本下的内容:
GET /api/v1/api-version/test/ HTTP 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/json Vary: Accept { "version": "v1", "warning": "该接口的 v1 版本已废弃,请尽快迁移至 v2 版本" }再访问版本号为 v2 的测试接口,返回的内容就是 v2 了。
GET /api/v2/api-version/test/ HTTP 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/json Vary: Accept { "version": "v2" }对于其它接口,无论 v1,v2 版本的接口均可以访问,这样就相当于完成了一次兼容的接口升级。
关注公众号加入我们