01 drf源码剖析之restful规范
01 restful规范
1. 什么是restful规范
restful是一套规则,是程序间进行数据传输的一种约定
REST 与技术无关,代表的是一种软件架构风格,REST 是 Representational State Transfer 的简称,中文翻译为"表征状态转移"
REST 从资源的角度来审视整个网络,它将分布在网络中某个节点的资源通过 URL 进行标识,客户端应用通过 URL 来获取资源的表征,获得这些表征使这些应用转变状态
所有的数据,不过是通过网络获取的还是操作(增删查改)的数据,都是资源,将一切数据视为资源是 REST 区别与其他架构风格的最本质属性
对于 REST 这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)
2.restful规范详细
建议用https代替http
- 为了保证数据的安全
在url中添加api标识
这样看到url就知道是一个api,建议放在域名后面,这样不会存在跨域问题
推荐下面写法,因为他不会存在跨域的问题
http://www.lbzhk.com/api/....
当然也可以这么写
http://api.lbzhk.com/....
在接口中体现版本信息
方便于版本的迭代,
示例:
http://www.lbzhk.com/api/v1....
注意:版本还可以放在请求头中
http://www.lbzhk.com/api/
accept: ...
一般资源都用名词
restful也称面向资源编程,视网上的一切都是资源
示例:
http://www.lbzhk.com/api/user/
如果要添加一些筛选条件,可以写在url中
示例:
http://www.lbzhk.com/api/user/?page=1&type=9
根据method不同做不同的操作
- get,获取数据
- post,添加
- put,更新
- patch,局部更新
- delete,删除
- options,预检
返回给用户状态码
- 200,成功
- 300,301永久重定向/302临时重定向
- 400,403拒绝访问/404找不到
- 500,服务端代码错误
对不同请求返回不同的数据
示例:
GET http://www.lbzhk.com/api/user/
# 返回资源对象的列表(数组)
[
{'id':1,'name':'张三','age':19},
{'id':1,'name':'李四','age':19},
]
POST http://www.lbzhk.com/api/user/
# 返回新生成的资源对象
{'id':1,'name':'张三','age':19} GET http://www.lbzhk.com/api/user/2/
# 读取资源时,传入标识符(identity),服务端返回标识符指定的单个资源对象
{'id':2,'name':'张三','age':19} PUT http://www.lbzhk.com/api/user/2/
# 返回完整的资源对象
{'id':2,'name':'张三','age':19} PATCH https//www.lbzhk.com/api/user/2/
# 返回被修改的属性
{'id':2,'name':'张三','age':19} DELETE https//www.lbzhk.com/api/user/2/
# 返回一个204状态码和空响应体或者返回空
.如果有异常返回错误信息
示例:
{
error: "Invalid API key"
}
对于下一个请求要返回一个接口
示例:
{
'id':2,
'name':'alex',
'age':19,
'depart': "http://www.lbzhk.com/api/user/30/"
}
01 drf源码剖析之restful规范的更多相关文章
- drf源码剖析系列(系列目录)
drf源码剖析系列(系列目录) 01 drf源码剖析之restful规范 02 drf源码剖析之快速了解drf 03 drf源码剖析之视图 04 drf源码剖析之版本 05 drf源码剖析之认证 06 ...
- 02 drf源码剖析之快速了解drf
02 drf源码剖析之快速了解drf 目录 02 drf源码剖析之快速了解drf 1. 什么是drf 2. 安装 3. 使用 3. DRF的应用场景 1. 什么是drf drf是一个基于django开 ...
- Django框架(十八)—— CBV源码分析、restful规范、restframework框架
目录 CBV源码分析.restful规范.restframework框架 一.CBV源码分析 1.url层的使用CBV 2.as_view方法 3.view方法 4.dispatch方法(可以在视图层 ...
- 07 drf源码剖析之节流
07 drf源码剖析之节流 目录 07 drf源码剖析之节流 1. 节流简述 2. 节流使用 3. 源码剖析 总结: 1. 节流简述 节流类似于权限,它确定是否应授权请求.节流指示临时状态,并用于控制 ...
- 06 drf源码剖析之权限
06 drf源码剖析之权限 目录 06 drf源码剖析之权限 1. 权限简述 2. 权限使用 3.源码剖析 4. 总结 1. 权限简述 权限与身份验证和限制一起,决定了是否应授予请求访问权限. 权限检 ...
- 05 drf源码剖析之认证
05 drf源码剖析之认证 目录 05 drf源码剖析之认证 1. 认证简述 2. 认证的使用 3. 源码剖析 4. 总结 1. 认证简述 当我们通过Web浏览器与API进行交互时,我们可以登录,然后 ...
- 04 drf源码剖析之版本
04 drf源码剖析之版本 目录 04 drf源码剖析之版本 1. 版本简述 2. 版本使用 3.源码剖析 4. 总结 1. 版本简述 API版本控制使您可以更改不同客户端之间的行为.REST框架提供 ...
- Django框架深入了解_01(Django请求生命周期、开发模式、cbv源码分析、restful规范、跨域、drf的安装及源码初识)
一.Django请求生命周期: 前端发出请求到后端,通过Django处理.响应返回给前端相关结果的过程 先进入实现了wsgi协议的web服务器--->进入django中间件--->路由f分 ...
- Django框架(十七)-- CBV源码分析、restful规范、restframework框架
一.CBV源码分析 1.url层的使用CBV from app01 import views url(r'book/',views.Book.as_view) 2.as_view方法 as_view是 ...
随机推荐
- Flutter学习笔记(31)--异步更新UI
如需转载,请注明出处:Flutter学习笔记(31)--异步更新UI 大家都知道,子线程不能操作UI控件,在我们Android的日常开发中,经常会遇到网络请求数据通过线程间通信,将数据发送到UI线程中 ...
- 在CentOS下利用Docker一键安装seafile
https://cloud.seafile.com/published/seafile-manual-cn/docker/pro-edition/%E7%94%A8Docker%E9%83%A8%E7 ...
- C#数据结构与算法系列(六):链表——双链表(Double-LinkedList)
1.对比单向链表 单向链表查找的方向只能是一个方向,而双向链表可以向前或者向后查找 单向链表不能自我删除,需要靠辅助节点,而双向链表可以自我删除 对于单向链表的删除,我们首先要找到单向链表待删除节点的 ...
- 【JMeter_21】JMeter逻辑控制器__模块控制器<Module Controller>
模块控制器<Module Controller> 业务逻辑: 可以理解为引用.调用的意思,执行内容为Module To Run种所选的内容,引用范围为当前测试计划内的测试片段.逻辑控制器& ...
- Jmeter服务器监控技术
meter-plugins.org推出了全新的Plugins Manager,对于其提供的插件进行了集中的管理, 将 ServerAgent-xxx.jar上传被测服务器解压 进入目录 ServerA ...
- 解决:Invalid character found in the request target.The valid characters are defined in RFC 7230 and RF
背景 在将tomcat升级到7.0.81版后,发现系统的有些功能不能使用了,查询日志发现是有些地址直接被tomcat认为存在不合法字符,返回HTTP 400错误响应,错入信息如下: 原因分析 经了解, ...
- java创建图片的缩略图
//java创建图片的缩略图private void createThumbnail(String filename, int thumbWidth, int thumbHeight, int qua ...
- 05.DBUnit的使用
相信做过单元测试的人都会对JUnit 非常的熟悉了,今天要介绍的DbUnit(http://dbunit.sourceforge.net/ ) 则是专门针对数据库测试的对JUnit 的一个扩展,它可以 ...
- 使用onload和setTimeout、setInterval来实现当前的时间
1.在body里面使用onload和在函数中使用setTimeout来实现当前的日期时间不断变化 2.在script中直接是用setInterval实现当前实现的日期时间不断变化 <!DOCTY ...
- .Net: C#中的委托(Delegate)和事件(Event)
委托和事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 是太容易了,而没有过去的人每次 ...