restful : 面向资源架构
restful 规范
1. API与用户的通信协议,https协议
2. 域名 https://api.example.com 尽量将API部署在专用域名
https://example.org/api API简单
3. 版本
https://api.example.com/v1/ v1: 版本
把版本放在请求头中
4. 路径,网络上任何东西都是资源,均使用名词表示(可复数)
127.0.0.1/books/ (使用名词books,而不是get_books)
5. 请求方式method: 通过请求方式来表示相应操作
127.0.0.1/books/
get: 获取图书 (服务器取出资源)
post: 表示新增一本书 (服务器新建一个资源)
delete: 表示删除一本书 (服务端删除资源)
put/patch: 表示修改一本书(服务器更新资源)
6. 过滤,通过url上传参的形式传递搜索条件
7. 状态码:
1开头: 服务器正在处理
2开头: 服务器处理成功
3开头: 重定向
4开头: 客户端错误
5开头: 服务器错误
--- 注意: 返回的数据中携带状态码
8. 错误处理,应返回错误信息,error当做key
9. 返回结果: 针对不同操作,返回数据格式要求
GET/collection: 返回资源对象的列表(数组)
GET/collection/resource: 返回单个资源对象
POST/collection: 返回新生成的资源
PUT/collection/resource: 返回完整的资源对象(PATCH一样)
DELETE /collection/resource: 返回一个空文档 10. 在返回结果中提供链接,Hypermedia API 小结: 路径都用名词表示,请求方式不同表示不同的操作
基于原生django写resful 规范的接口
def books(request):
if request.method == 'GET':
LL= [{'id':1,'title':'python'}]
return JsonResponse(LL,safe=False,json_dumps_params={'ensure_ascii':False}) 注意:restful 要求GET 返回资源对象的列表
CBV 源码执行流程(view 执行流程):
class Books(View):
def dispatch(self,request,*args,**kwargs):
print(1)
obj = super().dispatch(request,*args,**kwargs)
print(2)
return obj
def get(self,request):
return
def post(self,request):
return 1. 路由: url(r'^books/', views.Books.as_view()),
2. 当程序启动,as_view() 已经执行,返回一个函数(view)的内存地址
3. 当来请求(get,post),view加括号执行, 即内部dispatch方法执行,
4. dispatch 方法通过判断小写是否在http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace'] 中,用getattr 将字符串隐射成为 get 或post 或其他的函数内存地址, return的结果就是调用get(),post()...
drf 框架安装和简单使用
在原来django框架的基础上(在继承View基础上),多做了一些事
drf 提供的: 序列化组件 | 视图组件 | 解析器 | 认证组件 | 权限组件 | 频率组件 | 分页器 | 响应器 | url控制器 | 版本控制 安装: pip install djangorestframework
实质是一个app
settings中注册 INSTALLED_APPS = 'rest_framework',
只要用drf, 都是cbv # 基于drf 写的cbv---继承APIView (唯一区别)
from rest_framework.views import APIView
class Books(APIView) 小结:
基于drf写的cbv:
首先安装: pip install djangorestframework
然后注册: 'rest_framework'
继承: from rest_framework.views import APIView
drf 之 APIView 和 Response源码分析
1. 路由: url(r'^books/', views.Books.as_view()),
2. 继承APIView: class Books(APIView)
3. as_view() 走的是APIView 中的as_view 方法, return csrf_exempt(view) 取消局部认证的装饰器
即: 只要继承了APIView ,就都没有csrf的验证了
4. 当来请求(get,post), 上步得到的view 函数执行,即内部dispatch方法执行--- 此时的dispatch方法是APIView中的方法
5. request = self.initialize_request(request, *args, **kwargs) 被包装后的request(里面包含原来的request)
6. self.initial(request, *args, **kwargs) 该方法中进行了 认证,权限,频率,进行阻拦
7. 用getattr 将字符串隐射成为 get 或post 或其他的函数内存地址,返回调用的结果 小结:
class Books(APIView)
def get(request):
pass
1. 一旦继承了APIView, get 方法中的request是处理过后的request
2. 原来的request, _request = request
3. request.GET 等价 request._request.GET, 原因如下:
点拦截属性, setattr and getattr, 如果没有,就会走__getattr__
新的request 对象 重新写了 __getattr__方法, 把 _request 返回了
4. request.data data是post, put 的内容,字典形式
注意: 以后用 request.data 取出原来在 POST中的内容
restful : 面向资源架构的更多相关文章
- REST面向资源架构 RESTful架构
REST基础概念: 在REST中的一切都被认为是一种资源. 每个资源由URI标识. 使用统一的接口.处理资源使用POST,GET,PUT,DELETE操作类似创建,读取,更新和删除(CRUD)操作. ...
- SOA面向服务架构简述
在上篇中我们简单谈了下架构设计中服务层的简单理解,在这里我们将继续服务层的架构,在本节我们将重点在于分布式服务.在分布式系统中表现层和业务逻辑层 并不处于同一物理部署,所以我们必须存在分布式服务,以契 ...
- 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训
[编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...
- SOA 面向服务架构 阅读笔记(一)
Service Oriented Architecture 面向服务架构 学习笔记(一) 1.业务自由 1.1 在很多企业中,业务和IT技术是各自独立的,无法使用通用的统一语言进行管理. 1.2 ...
- [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店
一.前言 在前面专题一中,我已经介绍了我写这系列文章的初衷了.由于dax.net中的DDD框架和Byteart Retail案例并没有对其形成过程做一步步分析,而是把整个DDD的实现案例展现给我们,这 ...
- (转)漫谈SOA(面向服务架构)
http://blog.csdn.net/luohuacanyue/article/details/12521699 面向服务架构的思想在整个软件的架构中已经不是什么新鲜的东西.我简单的认为服务化是模 ...
- 面向服务架构(SOA)和企业服务总线(ESB)
http://www.cnblogs.com/shanyou/archive/2008/04/19/1161452.html 学习和研究在企业中实施面向服务架构(SOA),简单回顾SOA和ESB,重点 ...
- OSGi——面向服务架构规范简述
OSGi——面向服务架构规范简述 去年我们组要开发一个新的产品,在讨论产品架构路线的时候,美国的架构师向大家征集了架构设计思想(我推荐了SCSF),有一位工程师向他推荐了OSGi.以前我还没有听过OS ...
- [置顶] 漫谈SOA(面向服务架构)
面向服务架构的思想在整个软件的架构中已经不是什么新鲜的东西.我简单的认为服务化是模块化的延伸,所以服务化有着和模块化类似的优点和缺点.这里不再讨论这些服务定义服务与服务之间的通信协议(像WSDL等等) ...
随机推荐
- django时区设置 media配置 日期截断函数 上传图片管理设计方案
1.django时区 修改一下app里的设置 TIME_ZONE = 'Asia/Shanghai' USE_I18N = True USE_L10N = True # 不用UTC时间 USE_TZ ...
- 【Java】NO.83.Tool.1.GlassFish.1.001-【GlassFish 5 安装使用】-
1.0.0 Summary Tittle:[Java]NO.83.Tool.1.GlassFish.1.001-[GlassFish 5 安装使用]- Style:EBook Series:Java ...
- MySQL Backup mysqldump备份流程学习
我们都知道MySQL逻辑备份工具mysqldump可以保证备份数据的一致性,但是它是怎么保持一致性的? 本文不讨论mysqldump具体的选项和用法,一直对mysqldump的工作机制梳理的不太清楚, ...
- Shell脚本:while read line无法读取最后一行的问题
[1]Shell脚本:while read line无法读取最后一行的问题 刚刚利用shell脚本处理日志文件时,发现了一个问题:while read line无法读取到最后一行 通过编辑器可以看到待 ...
- 1333:【例2-2】Blah数集
1333:[例2-2]Blah数集 注意是数组,答案数组中不能有重复数字 q数组是存储答案的 代码: #include<iostream> #include<cstdio> # ...
- Centos 编译 安装 criu
下载依赖库 sudo yum install protobuf protobuf-c protobuf-c-devel protobuf-compiler protobuf-devel protobu ...
- sqlserver 空 处理
NULL:没有对(列)变量输入数据 'NULL'字符串:是长度为4的字符串 空字符串:有对(列)变量输入数据,输入的数据为空字符串 select case lxdh when '' then '空' ...
- shell实现自动部署两台tomcat项目Ⅱ
本次分为3个脚本, scp.sh放进第一台机器(负责传输文件), schenglee.sh放进第一台机器(自动部署), schenglee2.sh放进第二台机器(自动部署) 环境 tomcat1: 1 ...
- [Python]基础教程(1)、介绍及环境搭建
一.Python简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 是一种解释型语言: 这意味着开 ...
- (转载)【Unity3D学习】获取鼠标点击所对应的GameObject
刚开始学习Unity 3D,新手遇到的坑都是泪对自由的抗争.直入主题~ 首先,为GameObject需要添加组件“Box Collider”. 然后,在脚本中的Update方法中添加如下代码. if( ...