1. 程式人生 > >DRF 框架總結 - 版本 Versioning

DRF 框架總結 - 版本 Versioning

版本Versioning

REST framework提供了版本號的支援。

在需要獲取請求的版本號時,可以通過request.version來獲取。

預設版本功能未開啟,request.version 返回None。

開啟版本支援功能,需要在配置檔案中設定DEFAULT_VERSIONING_CLASS

REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
}

其他可選配置:

  • DEFAULT_VERSION
    預設版本號,預設值為None
  • 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