对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的默 ...
随机推荐
- Python 开发者节省时间的 10 个小技巧
Python 是一个美丽的语言,可以激发用户对它的爱.所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我推荐你尝试Python. Python有很多吸引程序员的功能 ...
- ES集群性能调优链接汇总
1. 集群稳定性的一些问题(一定量数据后集群变得迟钝) https://elasticsearch.cn/question/84 2. ELK 性能(2) — 如何在大业务量下保持 Elasticse ...
- 给二维码(图片)添加文字(水印),让生成的二维码中间带logo
<?php //生成二维码 require_once IA_ROOT . '/framework/library/qrcode/phpqrcode.php'; QRcode::png($url, ...
- Array排序方法sort()中的大坑
sort() 方法用于对数组的元素进行排序. 但是排序结果就有点坑了,都不按常规出牌的: // 看上去正常的结果: ['Google', 'Apple', 'Microsoft'].sort(); / ...
- Apache2.4整合tomcat8
1,编译mod_jk.so 不同版本apache对应不同的mod_jk,试验用tomcat-connectors-1.2.41-src.tar.gz , 下载后,解压,进入./native文件夹依次输 ...
- start、run、join
首先得了解什么是主线程,当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread).主线程的重要性体现在两方面:1. 它是产生其他子线程的线程:2. 通常它必须最后完 ...
- HttpComponents之httpclient
HttpComponents源码目录:http://www.boyunjian.com/javasrc/org.apache.httpcomponents/httpclient/4.3.4/_/ pa ...
- IOS 发布被拒 PLA 1.2问题 整个过程介绍 02 个人账户升级公司账户
首先,根据上一篇文章得出结论: 1.个人账户,可以发布非营销的APP.例如:公司企业站.个人站 2.公司账户,可以发布营销的APP.例如:京东,天猫,带有盈利的APP 3.企业账户,是使用在公司内部的 ...
- NOI2013
Bless All 其实已经没有什么遗憾了呢 下一篇就是OI 再见吧2333
- java创建多线程的三种方式
/***************************继承Thread类创建多线程************************/ public class FirstThread extends ...