RESTful api 与 Django的 restfulframework
RESTful api 与 Django的 restfulframework
1 restful api 的基本概念
一类的资源使用一个url,不同的操作通过 请求方式处理
api -- >> 就是一个url
两个用途:
为别人提供服务(发送邮件或者是发短信, 运营商提供接口, 客户通过api提交数据)
前后端分离
越来越火(原来是后端通过模板引擎实现)
restful(资源状态转移--它一种约定)
-- >> 对互联网上任意东西(url) 都视为资源 -- 面向资源编程
Re
资源(***) --- 每一个url,代表资源,网络上的具体信息
S(State)
表现层 ---- 客户端与服务器之间,传递这种资源的某种表现层
T(Transfer)
状态转换 ---- POST/GET/PUT/DELETE 对服务器资源进行操作,实现转换
restful api是 实现 前后端分离的最佳实践
请求一个url的方式遵循:
GET
POST
PUT
DELETE
1 轻量,直接通过http,不需要额外的协议,post/get/delete
2 面向资源,一目了然,具有自解释性
3 数据描述简单,一般是 json,或者 xml 进行数据通信
前后端分离的优点与缺点
优点
pc,app,pad 多端适应
SPA (single page) 开始流行
前后端开发 职责不分(解决template 由谁来写的问题)
提高开发效率,前后不用再互相等待
降低模板语言耦合性
(不再用模板语言)
缺点
前后端学习 门槛增加
文档(后端给前端--文档)
前端工作量增加
SEO
后端开发去、模式迁移增加成本
2 restful api 设计规范:
协议
API与用户的通信协议,总是使用HTTPs协议。
域名
https://api.example.com 尽量将API部署在专用域名(会存在跨域问题)
https://example.org/api/ API很简单
版本
URL,如:https://api.example.com/v1/
请求头
跨域时,引发发送多次请求
路径,视网络上任何东西都是资源,均使用名词表示(可复数)
https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees
method
GET :从服务器取出资源(一项或多项)
POST :在服务器新建一个资源
PUT :在服务器更新资源(客户端提供改变后的完整资源)
PATCH :在服务器更新资源(客户端提供改变的属性)
DELETE :从服务器删除资源
过滤,通过在url上传参的形式传递搜索条件
https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
状态码
错误处理,状态码是4xx时,应返回错误信息,error当做key。
{
error: "Invalid API key"
}
返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。
GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档
Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
{"link": {
"rel": "collection https://www.example.com/zoos",
"href": "https://api.example.com/zoos",
"title": "List of zoos",
"type": "application/vnd.yourformat+json"
}}
摘自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
REST 的设计原则
统一接口 Uniform interface
无状态 Stateless
可缓存 Cacheable
服务端 客户端分离 Client-Server
分层系统 Layered System
按需编码 Code on command
3 CBV 模型:
基于类视图与基于函数的视图
django的 cbv(class base view) 和 fbv(function base view)
cbv 是django 官方推荐的方式, 代码重用性好
功能实现方法
通过dispatch 方法 ,反射 request中 method 的 对应值,获得相应的方法
路由
CView.as_view() == >> 返回 view 函数 | 调用dispatch(返回相应的response对象)
CBV ---- 基于反射实现 根据不同的请求方式 执行不同的方法
在请求前后 加上一段功能,多个类继承 基类
class MyBaseView(object):
def dispatch(self, request, *args, **kwargs):
print('before')
ret = super(MyBaseView,self).dispatch(request, *args, **kwargs)
print('after')
return ret
class LoginView(MyBaseView,APIView):
def get(self,request,*args,**kwargs):
ret = {
'code':1000,
'data':'老sdas'
}
response = JsonResponse(ret)
return response
4 Django Restful framework:
基于 django 开发 的用于 RESTful api 接口的 框架;
(1)安装:
依赖 django
(1)pip install djangorestframework
需要安装django -- 可以使用豆瓣镜像 加速
pip install -i https://pypi.douban.com/simple/ django
(2)pip install markdown django-filter
两个包一起安装
(2) DRF中的 request 与 django的 request的区别
DRF 的 request 对 django 的 request 进行了更一步的封装
(1)通过 dispatch 添加 内容
parser
autheticators # 获取认证相关的所有类,并实例化,传入request对象(user,auth)
negotator
parse_context
可以把认证类,写在配置文件中 --- 全局配置
也可以视图中 定义 --- 视图配置
authentication_classes =[] 来取消认证
REST_FRAMEWORK = {
'UNAUTHENTICATED_USER':None,
'UNAUTHENTICATED_TOKEN':None,
'DEFAULT_AUTHENTICATION_CLASSES':[
'goods.utils.MyAuthentication'
]
}
(2)执行 initialize 方法
处理版本
认证 auth
权限 permission
访问频率限制 throttle
(3) 通过 反射 执行相应的 方法
(4)response 加工 ,返回结果
RESTful api 与 Django的 restfulframework的更多相关文章
- RESTful API 和 Django REST framework
100天 cmdb最后一天 #RESTful API - 定义规范 如get就是请求题 - 面向资源编程 把网络任何东西都当作资源 #给一个url,根据方法的不同对资源做不同的操作 #返回结果和状态码 ...
- day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能
目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...
- 使用Django创建RESTful API
Agenda 1.What is an api Api refers to application programming interface It is a set of subroutine de ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- Django编写RESTful API(一):序列化
欢迎访问我的个人网站:www.comingnext.cn 关于RESTful API 现在,在开发的过程中,我们经常会听到前后端分离这个技术名词,顾名思义,就是前台的开发和后台的开发分离开.这个技术方 ...
- Django编写RESTful API(二):请求和响应
欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章,已经实现了访问指定URL就返回了指定的数据,这也体现了RESTful API的一个理念,每一个URL代表着一个资源.当然我 ...
- Django编写RESTful API(四):认证和权限
欢迎访问我的个人网站:www.comingnext.cn 前言: 按照前面几篇文章里那样做,使用Django编写RESTful API的基本功能已经像模像样了.我们可以通过不同的URL访问到不同的资源 ...
- RESTful API学习Day2 - Django REST framework
Django REST framework 参考文档: 官方文档:官方文档 中文文档:中文文档 一.是什么? 基于Django开发RESTful API的一个框架 为什么要用它? 补充: CBV的 ...
- python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)
昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...
随机推荐
- HDU1081:To The Max(最大子矩阵,线性DP)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1081 自己真够垃圾的,明明做过一维的这种题,但遇到二维的这种题目,竟然不会了,我也是服了(ps:猪啊). ...
- Hadoop十年解读与发展预测
编者按:Hadoop于2006年1月28日诞生,至今已有10年,它改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用.在2016年Ha ...
- java多线程总结(二)
线程一般有6个状态: 新建状态:NEW 可运行状态:RUNNABLE 休眠状态:TIMED_WAITING 等待状态:WAITING 阻塞状态:BLOCKED 终止状态“TERMINATED 当我们使 ...
- 分页和Cookie、Session
分页和Cookie.Session 分页 自定义分页 函数班 from django.shortcuts import render # Create your views here. data = ...
- Xamrin开发安卓笔记(三)
http://www.cnblogs.com/minCS/p/4118170.html Xamrin开发安卓笔记(三) 安装片 Xamrin开发安卓笔记(一) Xamrin开发安卓笔记(二) 这次 ...
- github使用ssh秘钥的好处以及设置(转)
git使用https协议,每次pull,push都要输入密码,使用git协议,使用ssh秘钥,可以省去每次输密码 大概需要三个步骤:一.本地生成密钥对:二.设置github上的公钥:三.修改git的r ...
- CodeForces - 995E Number Clicker (双向BFS)
题意:给出u,v,p,对u可以进行三种变化: 1.u=(u+1)%p ; 2.u = (u+p-1)%p; 3.u = 模p下的逆元.问通过几步可以使u变成v,并且给出每一步的操作. 分析:朴素的b ...
- MySQL-5.7密码策略及用户资源限制
1.密码策略 在mysql 5.6对密码的强度进行了加强,推出了validate_password 插件.支持密码的强度要求. (1)安装插件 [root@localhost ~]# ll /usr/ ...
- HGVS,非HGVS形式的突变描述解释
NG_012232.1(NM_004006.1):c.93+1G>T: 在该转录本NM_004006.1外显子的第93个碱基的下1个碱基(属于内含子)G变为T. NG_012232.1(NM_0 ...
- 单片机、嵌入式CAN通信原理
工作原理: 单片机里内置了一个FIFO(先进先出)芯片,需要发送什么报文,就往这个芯片里写.比如有两个单片机作为CAN节点,A节点往自己的FIFO中写CAN报文,B节点往自己的FIFO中写CAN报文. ...