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. 空基类优化empty base class optimization

    1.为什么C++中不允许类的大小是0 class ZeroSizeT {}; ZeroSizeT z[10]; &z[i] - &z[j]; 一般是用两个地址之间的字节数除以类型大小而 ...

  2. springmvc get post put delete

    web.xml <!-- 配置 org.springframework.web.filter.HiddenHttpMethodFilter: 可以把 POST 请求转为 DELETE 或 POS ...

  3. hdu1711 Number Sequence kmp应用

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1711 题目: Problem Description Given two sequences of n ...

  4. python网络编程——SocketServer/Twisted/paramiko模块

    在之前博客C/S架构的网络编程中,IO多路复用是将多个IO操作复用到1个服务端进程中进行处理,即无论有多少个客户端进行连接请求,服务端始终只有1个进程对客户端进行响应,这样的好处是节省了系统开销(se ...

  5. js原型 作用域

    了解JavaScript原型链之前首先肯定要知道什么是原型. JavaScript中,原型是一个对象,通过原型可以实现属性的继承.既然原型是一个对象,那么任何一个对象都可以称为原型吗?是,记住它.什么 ...

  6. Android平台利用OpenCL框架实现并行开发初试

    http://www.cnblogs.com/lifan3a/articles/4607659.html 在我们熟知的桌面平台,GPU得到了极为广泛的应用,小到各种电子游戏,大到高性能计算,多核心.高 ...

  7. 【JavaScript】键盘控制小球

    参考: 1.Simple Canvas Game 2.javaScript 事件监听 <!DOCTYPE html> <html> <head> <meta ...

  8. Nginx进阶-不停服更新

    前言 7*24小时不间断的提供对外服务和产品快速迭代是互联网行业的特征,基于需求所有的发布都不能停止当前对外的服务.本文围绕此话题衍生出,不停服上下线工具实现. 看本文前请先看 Nginx初识 Ten ...

  9. 黑苹果Yosemite 10.10.1 修改wowpc.iso文件免选择直接启动Mac系统

    安装教程见: http://www.cnblogs.com/zouzf/p/4356641.html 网上很多教程都是OK的,但每个人的具体情况不同就可能有一些细节问题搞死你1.本文所指的 wowpc ...

  10. 【bzoj1009】[HNOI2008]GT考试(矩阵快速幂优化dp+kmp)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1009 这道题一看数据范围:$ n<=10^9 $,显然不是数学题就是矩乘快速幂优 ...