对django rest_framework的个人理解
首先要搞清楚web service 和rest都是一种API设计的架构,简单点说
作为一个api开发者,为了保证跨语言、跨平台的高效api,我们可以采用架构师提出的设计架构的理念去设计符合条件的api.
比方说web service是以service为重点,就好比把公司内部系统的业务方法发布成WebService服务,供远程合作单位和个人调用,也就是封装成可调用的api。web service是由WSDL+UDDI+SOAP,这三个重要的概念组成,wsdl就是公司将自己能够提供的服务用xml的形式表示出来,就像在公司外面贴了一张告示一样,告诉大家我们公司可以提供什么样的服务,UDDI就是将自己的WSDL文件暴露出来,让大家都知道的一种方式,也就是企业在UDDI服务器上注册WSDL可以供用户自己无查找本公司的服务,或者直接给出URI,定位到WSDL文件,消费者怎么使用web service,以怎么样的形式去使用,就是soap的概念了。
所以,web service就是比如像天气预报、淘宝网等把自己的系统服务以web service的形式暴露出来,不论你使用的是哪一个操作系统,如果想要调用他的服务,只要遵循web service的设计规则,就可以成功使用它们的服务
rest是一种api的设计架构,如果想要自己设计的api,能够满足不同的平台的需要,可以使用REST的规则来进行设计。API就是前后端进行交流的一个入口,而 rest风格的API使交互的时候更加规范,更加容易。REST的重点是resource,也就是资源。restful的设计核心就是服务器上所有的东西都是资源。所有的HTTP action都应该是相应的resource上可以被处理的。API就是对资源的管理操作,具体的操作是由http action定的。
上面的意思就是说,restful的设计中心就是服务器上的资源,API就是对资源进行操作的程序,而具体怎么操作这些资源,是增加、修改,还是删除是由http action决定的。在一个RESTful系统里,客户端向服务端发起索取资源的操作只能通过HTTP协议语义来进行交互。这5个协议是:
GET:从服务器取出资源(一项或者多项)
POST:在服务器新建一个资源
PUT:在服务器更新资源(客户端提供完整资源数据)
DELETE:从服务器删除资源
HEAD:从服务器获取报头信息(不是资源)
在客户端与服务器端进行交互时,又规定了相应的交互格式,其中最常用的是以application开头的。
application/json JSON数据格式
application/xhtml+xml XHTML格式
application/xml XML数据格式
application/atom+xml XML聚合格式
通俗点解释,就是说,客户端和服务端是不能直接交互数据,在这里是要使用API的,就好比警察和卧底,他们是不能直接交流的,需要通过某种暗号,比方说敲三下门,这里的敲三下门就是HTTP协议,交流的时候也不能直接交流需要一种交流语言,比方说英语,俄语之类的,这就是上面刚说的交互格式。
在一个RESTful系统里,客户端向服务端发起索取资源的操作只能通过HTTP协议语义来进行交互,客户端与服务端进行交互响应时,需要规定双方能够接受何种类型的媒体表现形式,也就是说,API设计的时候,只有遵循http协议前后端才能进行交互,也只有使用合理的资源类型,才能让客户端获取到交互数据。
API的设计规则:
应该尽量将API部署在专用域名之下,URL中应尽量使用名词,尽量避免使用动词
路径又称"终点"(endpoint),表示API的具体网址
找到特定领域的媒体类型,根据特定的领域来设计媒体类型
易拓展性
灵活性
可移植性
上面的都是索引,只为引出最终的rest_framework,就是rest风格的框架,能够实现被重复利用的api,满足前后端数据的交互
对django rest_framework的个人理解的更多相关文章
- 详解Django rest_framework实现RESTful API
这篇文章主要介绍了详解Django rest_framework实现RESTful API,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 一.什么是REST 面向资源是R ...
- Django rest_framework 实用技巧
前言: 最近工作中需要用到Django rest_framework框架做API, 边学边写,记录了一些实际工作中需要用到的功能,不是很全也不系统,以后需要什么功能可以在这查询. 后续还会更新其它的用 ...
- Python之Django rest_Framework框架源码分析
#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_fram ...
- Python之Django rest_Framework(2)
实例化: v1 = ["view.xxx.path.Role","view.xxx.path.Group",] 可以循环,循环出来的每一个不能实例化 如果把v1 ...
- 七、django rest_framework源码之视图
1 绪言 当大家看大这篇博文的时候,应该对Django rest_framework中的CBV有所了解了,大致来说就是通过定义类来继承APIView类,并在类中定义get.post.put.delet ...
- 五、django rest_framework源码之版本控制剖析
1 绪论 Djangorest_framework的版本控制允许用户更改不同客户端之间的行为,且提供了许多不同的版本控制方案.版本控制由传入的客户端请求确定,可以基于请求URL,也可以基于请求标头. ...
- 四、django rest_framework源码之频率控制剖析
1 绪言 权限判定之后的下一个环节是访问频率控制,本篇我们分析访问频率控制部分源码. 2 源码分析 访问频率控制在dispatch方法中的initial方法调用check_throttles方法开始. ...
- 二、django rest_framework源码之认证流程剖析
1 绪言 上一篇中讲了django rest_framework总体流程,整个流程中最关键的一步就是执行dispatch方法.在dispatch方法中,在调用了一个initial方法,所有的认证.权限 ...
- django rest_framework中将json输出字符强制为utf-8编码
最近在和日本外包合作开发JIRA对接发布系统的版本单时, 遇到这个问题. 就是我们这边的输出浏览器显示为中文,而到了JIRA端就出现乱码. 查了文档,原来django rest_framework的默 ...
随机推荐
- 每天一个linux命令(6/18):lsof命令
lsof(list open files)是一个列出当前系统打开文件的工具.在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以,lsof的功 ...
- hi3515 rtc驱动(ds1307/1339)驱动和示例
将驱动放入/extdrv中编译 部分驱动如下: #include <linux/module.h> #include <linux/miscdevice.h>#include ...
- 黑色CSS3立体动画菜单
在线演示 本地下载
- Kubernetes Ingress
Kubernetes关于服务的暴露主要是通过NodePort方式,通过绑定node主机的某个端口,然后进行pod的请求转发和负载均衡,但这种方式下缺陷是 Service可能有很多个,如果每个都绑定一个 ...
- MyBatis联合查询association使用
1.需求 两张表 channels(频道表) member(会员表) 频道表里面有会员id,查询频道列表的时候需要关联查询出会员的名称,头像等信息 . 2.channels.xml定义,配置主要在这 ...
- 添加nginx服务到service的过程
Linux命令service - 系统服务管理(转) 用途说明 service命令用于对系统服务进行管理,比如启动(start).停止(stop).重启(restart).查看状态(status)等. ...
- Tensorflow 从零开始
1.安装pip pip是一个用于管理和安装Python包的工具,类似于LINUX 的yum命令一样! 命令(Ubuntu系统):sudo apt-get install python-pip 验证安装 ...
- HDU3047 Zjnu Stadium
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- tyvj 1884 [NOIP2000T4]方格取数 || codevs 1043 dp
P1884 [NOIP2000T4]方格取数 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 [noip2000T4]方格取数 描述 设有N*N的方格图(N& ...
- python matrix/array反向切片
>>> import numpy as np >>> m = np.mat([[1.,1,1],[1,2,3,],[1,5,1,]]) >>> m ...