DRF版本控制
DRF版本控制
為什么需要版本控制
API 版本控制允許我們?cè)诓煌目蛻舳酥g更改行為(同一個(gè)接口的不同版本會(huì)返回不同的數(shù)據(jù))。 DRF提供了許多不同的版本控制方案。
可能會(huì)有一些客戶端因?yàn)槟承┰虿辉倬S護(hù)了,但是我們后端的接口還要不斷的更新迭代,這個(gè)時(shí)候通過(guò)版本控制返回不同的內(nèi)容就是一種不錯(cuò)的解決方案。
DRF提供的版本控制方案
DRF提供了五種版本控制方案,如下圖:
版本控制系統(tǒng)的使用
全局配置
這里我們以?URLPathVersioning 為例,還是在項(xiàng)目的settings.py中REST_FRAMEWORK配置項(xiàng)下配置:
REST_FRAMEWORK = {...'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning','DEFAULT_VERSION': 'v1', # 默認(rèn)的版本'ALLOWED_VERSIONS': ['v1', 'v2'], # 有效的版本'VERSION_PARAM': 'version', # 版本的參數(shù)名與URL conf中一致 }urls.py中
urlpatterns = [...url(r'^(?P<version>[v1|v2]+)/publishers/$', views.PublisherViewSet.as_view({'get': 'list', 'post': 'create'})),url(r'^(?P<version>[v1|v2]+)/publishers/(?P<pk>\d+)/$', views.PublisherViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),]我們?cè)谝晥D中可以通過(guò)訪問(wèn) request.version 來(lái)獲取當(dāng)前請(qǐng)求的具體版本,然后根據(jù)不同的版本來(lái)返回不同的內(nèi)容:
我們可以在視圖中自定義具體的行為,下面以不同的版本返回不同的序列化類為例
class PublisherViewSet(ModelViewSet):def get_serializer_class(self):"""不同的版本使用不同的序列化類"""if self.request.version == 'v1':return PublisherModelSerializerVersion1else:return PublisherModelSerializerqueryset = models.Publisher.objects.all()局部配置
注意,通常我們是不會(huì)單獨(dú)給某個(gè)視圖設(shè)置版本控制的,如果你確實(shí)需要給單獨(dú)的視圖設(shè)置版本控制,你可以在視圖中設(shè)置versioning_class屬性,如下:
class PublisherViewSet(ModelViewSet):...versioning_class = URLPathVersioning?
轉(zhuǎn)載于:https://www.cnblogs.com/lxfpy/p/11097844.html
總結(jié)
- 上一篇: apt-get卸载命令
- 下一篇: 可执行文件组成及内存映射