DRF 框架總結 - 版本 Versioning
阿新 • • 發佈:2018-12-24
版本Versioning
REST framework提供了版本號的支援。
在需要獲取請求的版本號時,可以通過request.version
來獲取。
預設版本功能未開啟,request.version
返回None。
開啟版本支援功能,需要在配置檔案中設定DEFAULT_VERSIONING_CLASS
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
}
其他可選配置:
- DEFAULT_VERSION
- ALLOWED_VERSIONS 允許請求的版本號,預設值為None
- VERSION_PARAM 識別版本號引數的名稱,預設值為’version’
支援的版本處理方式
1) AcceptHeaderVersioning
請求頭中傳遞的Accept攜帶version
GET /bookings/ HTTP/1.1
Host: example.com
Accept: application/json; version=1.0
2)URLPathVersioning
URL路徑中攜帶
urlpatterns = [
url(
r'^(?P<version>(v1|v2))/bookings/$',
bookings_list,
name='bookings-list'
),
url(
r'^(?P<version>(v1|v2))/bookings/(?P<pk>[0-9]+)/$',
bookings_detail,
name='bookings-detail'
)
]
3)NamespaceVersioning
名稱空間中定義
# bookings/urls.py
urlpatterns = [
url(r'^$', bookings_list, name='bookings-list'),
url(r'^(?P<pk>[0-9]+)/$', bookings_detail, name='bookings-detail')
]
# urls.py
urlpatterns = [
url(r'^v1/bookings/', include('bookings.urls', namespace='v1')),
url(r'^v2/bookings/', include('bookings.urls', namespace='v2'))
]
4)HostNameVersioning
主機域名攜帶
GET /bookings/ HTTP/1.1
Host: v1.example.com
Accept: application/json
5)QueryParameterVersioning
查詢字串攜帶
GET /something/?version=0.1 HTTP/1.1
Host: example.com
Accept: application/json