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的更多相关文章

  1. RESTful API 和 Django REST framework

    100天 cmdb最后一天 #RESTful API - 定义规范 如get就是请求题 - 面向资源编程 把网络任何东西都当作资源 #给一个url,根据方法的不同对资源做不同的操作 #返回结果和状态码 ...

  2. 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 ...

  3. 使用Django创建RESTful API

    Agenda 1.What is an api Api refers to application programming interface It is a set of subroutine de ...

  4. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  5. Django编写RESTful API(一):序列化

    欢迎访问我的个人网站:www.comingnext.cn 关于RESTful API 现在,在开发的过程中,我们经常会听到前后端分离这个技术名词,顾名思义,就是前台的开发和后台的开发分离开.这个技术方 ...

  6. Django编写RESTful API(二):请求和响应

    欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章,已经实现了访问指定URL就返回了指定的数据,这也体现了RESTful API的一个理念,每一个URL代表着一个资源.当然我 ...

  7. Django编写RESTful API(四):认证和权限

    欢迎访问我的个人网站:www.comingnext.cn 前言: 按照前面几篇文章里那样做,使用Django编写RESTful API的基本功能已经像模像样了.我们可以通过不同的URL访问到不同的资源 ...

  8. RESTful API学习Day2 - Django REST framework

    Django REST framework 参考文档: 官方文档:官方文档 中文文档:中文文档 一.是什么? 基于Django开发RESTful API的一个框架 为什么要用它? 补充: ​ CBV的 ...

  9. python 全栈开发,Day95(RESTful API介绍,基于Django实现RESTful API,DRF 序列化)

    昨日内容回顾 1. rest framework serializer(序列化)的简单使用 QuerySet([ obj, obj, obj]) --> JSON格式数据 0. 安装和导入: p ...

随机推荐

  1. HDU1081:To The Max(最大子矩阵,线性DP)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1081 自己真够垃圾的,明明做过一维的这种题,但遇到二维的这种题目,竟然不会了,我也是服了(ps:猪啊). ...

  2. Hadoop十年解读与发展预测

    编者按:Hadoop于2006年1月28日诞生,至今已有10年,它改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用.在2016年Ha ...

  3. java多线程总结(二)

    线程一般有6个状态: 新建状态:NEW 可运行状态:RUNNABLE 休眠状态:TIMED_WAITING 等待状态:WAITING 阻塞状态:BLOCKED 终止状态“TERMINATED 当我们使 ...

  4. 分页和Cookie、Session

    分页和Cookie.Session 分页 自定义分页 函数班 from django.shortcuts import render # Create your views here. data = ...

  5. Xamrin开发安卓笔记(三)

    http://www.cnblogs.com/minCS/p/4118170.html Xamrin开发安卓笔记(三)   安装片 Xamrin开发安卓笔记(一) Xamrin开发安卓笔记(二) 这次 ...

  6. github使用ssh秘钥的好处以及设置(转)

    git使用https协议,每次pull,push都要输入密码,使用git协议,使用ssh秘钥,可以省去每次输密码 大概需要三个步骤:一.本地生成密钥对:二.设置github上的公钥:三.修改git的r ...

  7. 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 ...

  8. MySQL-5.7密码策略及用户资源限制

    1.密码策略 在mysql 5.6对密码的强度进行了加强,推出了validate_password 插件.支持密码的强度要求. (1)安装插件 [root@localhost ~]# ll /usr/ ...

  9. HGVS,非HGVS形式的突变描述解释

    NG_012232.1(NM_004006.1):c.93+1G>T: 在该转录本NM_004006.1外显子的第93个碱基的下1个碱基(属于内含子)G变为T. NG_012232.1(NM_0 ...

  10. 单片机、嵌入式CAN通信原理

    工作原理: 单片机里内置了一个FIFO(先进先出)芯片,需要发送什么报文,就往这个芯片里写.比如有两个单片机作为CAN节点,A节点往自己的FIFO中写CAN报文,B节点往自己的FIFO中写CAN报文. ...