前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django Rest Framework 版本(上)

Django Rest Framework 版本(上)

作者头像
小团子
发布2019-07-18 11:35:13
7010
发布2019-07-18 11:35:13
举报
文章被收录于专栏:数据云团数据云团

Django Rest Framework 限流(下)

Django进阶篇 Rest framework (三) 中,有关版本的问题,用 restful 规范做开发接口的时候,用户请求 API,系统返回数据。但是难免在系统发展的过程中,不可避免的需要添加新的资源,或者修改现有资源。

因此,改动升级必不可少,但是,作为平台开发者,应该知道:一旦你的 API 开放出去,有人开始用了,平台的任何改动都需要考虑对当前用户的影响。因此,做开放平台,从第一个 API 的设计就需要开始 API 的版本控制策略问题,API 的版本控制策略就像是开放平台和平台用户之间的长期协议,其设计的好坏将直接决定用户是否使用该平台,或者说用户在使用之后是否会因为某次版本升级直接弃用该平台。

<1> 定义版本

怎么定义版本协议,前端后端怎么协调。有以下几种方式:

  • 请求头中定义

# 版本为1.0

GET /nothing/ HTTP/1.1

Host: example.com

Accept: application/json; version=1.0

  • URL 中定义

# 版本为1.0

URL: example.com/v1.0/

GET /1.0/nothing/ HTTP/1.1

Host: example.com

Accept: application/json

  • 子域名中定义

# 版本为1.0

GET /nothing/ HTTP/1.1

Host: v1.example.com

Accept: application/json

  • HttpRequest 参数传递

# 版本为1.0

GET /nothing/?version=1.0 HTTP/1.1

Host: example.com

Accept: application/json

<二> 版本参数

在 django rest framework 中,如果没有在配置文件 settings.py 中设置默认的 VERSION_PARAM,即版本参数,drf 会设置默认的参数为 version,并将获取到的 version 的值封装到 request.version 中。

① 请求头中定义

django rest framework 的 request,其实是对原生的 Django 的 HttpRequest 做了一个封装,通过直接获取属性可以获取到请求头中的版本号。

django rest framework 的 request

原生的 Django 的 HttpRequest

请求头的版本和其它请求头信息最终会放到 META 中,因此想要获取版本号可以这样:

# 获取版本号

version = request._request.META.get("version")

② 子域名中定义

像请求头中定义一样,在请求头中也可以直接获取到域名,放到 META 中,因此想要获取版本号可以这样:

  • # 先获取主机域名

host = request._request.META.get("HTTP_HOST")

  • # 获取版本号

version = host.split(".")[0]

在 django rest framework 内部也有关于以上两种定义版本的处理方法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档