对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的默 ...
随机推荐
- Java数据类型 及 转换原则
一.数据类型分类:主要分为 基本类型.引用类型两大类: 二.基本类型 转换原则 1.类型转换主要在在 赋值.方法调用.算术运算 三种情况下发生. a.赋值和方法调用 转换规则:从低位类型到高位类型自动 ...
- Django-虚拟环境设置
Django 虚拟环境virtualenv virtualenv是用来处理多个用python语言进行开发的项目,在同一台机器上部署,不同项目依赖不同第三方库版本所造成的问题. 打个比方,现在你机器上要 ...
- nodejs文件追加内容
const fs = require("fs"); // fs.appendFile 追加文件内容 // 1, 参数1:表示要向那个文件追加内容,只一个文件的路径 // 2, 参数 ...
- 高通LCD驱动调试
本文转载自:http://www.itgo.me/a/x6305658852004979994/lcd%20qcom 来自 :http://blog.csdn.net/dacaozuo/article ...
- 服务器windows 2003 安装SQL 2000+SP4
(在windows 2003安装SQL 2000,对于03系统是没有32位和64位之分的) (32位系统需要重启机器,64不需要) 在站点下载数据库 解压后有两个文件夹 首先安装SQL2000 第1步 ...
- redis中文文档
phpredis是php的一个扩展,效率是相当高有链表排序功能,对创建内存级的模块业务关系 很有用;以下是redis官方提供的命令使用技巧: 下载地址如下: https://github.com/ow ...
- processing学习整理---Structure
1.语法介绍:与java很相近,可以认为就是java. 2.运行命令(linux): processing-java --output=/tmp/processing-xx --run --force ...
- VC数据类型
不同编码格式下的字符串处理及相互转化: ◆ 大家在编程时经常遇到的数据类型:● Ansi:char.char * .const char *CHAR.(PCHAR.PSTR.LPSTR).LPCSTR ...
- Spring初学之spring的事务管理注解
spring的事务管理,本文的例子是:比如你需要网购一本书,卖书的那一方有库存量以及书的价格,你有账户余额.回想我们在编程中要实现买书这样的功能,由于你的账户表和书的库存量表肯定不是同一张数据库表,所 ...
- alibaba的JSON.toString会把值为null的字段去掉,谨记
alibaba的JSON.toString会把值为null的字段去掉,谨记 Map<String,Object> map = new HashMap<>(); map.put( ...