RESTFULL规范

一:什么是RESTFULL

它是一个规范,面向资源架构

- REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
- REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
- REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
- 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
- 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

二:RESTFULL API 规范(10条)

1 API与用户的通信协议,总是使用HTTPs协议
2域名

  • https://api.example.com 尽量将API部署在专用域名(会存在跨域问题)
  • https://example.org/api/ API很简单

3 版本

  • URL,如:https://api.example.com/v1/

  • 请求头 跨域时,引发发送多次请求-把版本号放在请求头中

    127.0.0.1/book/1

4 路径,视网络上任何东西都是资源,均使用名词表示(可复数) 必须说出来
127.0.0.1/get_all_book/ 以前你这么写
127.0.0.1/books/
5 method,通过请求方式来表示进行的操作

  • GET :从服务器取出资源(一项或多项)
  • POST :在服务器新建一个资源
  • PUT :在服务器更新资源(客户端提供改变后的完整资源)
  • PATCH :在服务器更新资源(客户端提供改变的属性)
  • DELETE :从服务器删除资源

​ 127.0.0.1/books/ get请求:表示获取所有图书
​ 127.0.0.1/books/1 get请求:表示获取id为1的图书
​ 127.0.0.1/books/ post请求:表示新增一本书
​ 127.0.0.1/books/ delete请求:表示删除一本书
​ 127.0.0.1/books/ put/patch请求:表示修改一本书
6 过滤,通过在url上传参的形式传递搜索条件
7 状态码
​ 1 开头:服务器正在处理
​ 2 开头:服务器处理成功
​ 3 开头:重定向
​ 4 开头:客户端错误
​ 5 开头:服务器错误
​ 注意:在返回的数据中携带状态码
8 错误处理,应返回错误信息,error当做key

{error: "Invalid API key"
}

9 返回结果针对不同操作,返回数据格式要求

GET /collection:返回资源对象的列表(数组)
GET /collection/resource:返回单个资源对象
POST /collection:返回新生成的资源对象
PUT /collection/resource:返回完整的资源对象
PATCH /collection/resource:返回完整的资源对象
DELETE /collection/resource:返回一个空文档

10 返回结果中提供链接,Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么

{"link": {"rel":   "collection https://www.example.com/zoos","href":  "https://api.example.com/zoos","title": "List of zoos","type":  "application/vnd.yourformat+json"
}}

三、基于原生django写resful规范的接口

路由系统:

urlpatterns = [url(r'^users/$', views.Users.as_view()),url(r'^users2/$', views.user2),]

视图函数:

import jsondef  user2(request):if request.method=='GET':dic = {'status':200,'name': 'lqz2', 'age': 18}return HttpResponse(json.dumps(dic))elif request.method=='POST':dic = {'status': 200, 'msg': '修改成功'}return JsonResponse(dic)class Users(View):def get(self, request):dic = {'status':200,'name': 'lqz', 'age': 18}return HttpResponse(json.dumps(dic))def post(self, request):dic = {'status': 200, 'msg': '修改成功'}return JsonResponse(dic)

四、CBV源码执行过程

-路由写成:url(r'^books/', views.Books.as_view()),
-当程序启动,第二个位置其实已经放了一个函数的内存地址了(as_view内部view这个函数)
-比如来了一个get请求,拿到第二个位置参数内存地址加括号执行(request,*args,**kwargs),其实就是view(request,*args,**kwargs)-本质就是执行了dispatch(request,*args,**kwargs)方法-dispatch方法内部通过请求方式(get,post),反射出要执行的方法,去执行,然后返回

五、APIView的源码执行流程

比如get请求来了,执行View的as_view方法内部的view闭包函数,view闭包函数中执行了dispatch方法,
现在再执行dispatch,就已经不是View的dispatch,是APIView的dispatch方法了

转载于:https://www.cnblogs.com/prodigal/p/10594616.html

RESTFULL 01 规范相关推荐

  1. Ajax应用开发:实践者指南

    目前的Web应用开发基本上都是围绕富互联网应用(Rich Internet Application,RIA)展开.RIA的实现技术有很多种:Ajax.Flash.JavaFX和Sliverlight等 ...

  2. HTML <label>标签</label>中的“ for”属性有什么作用<label>?</label>

    本文翻译自:What does "for" attribute do in HTML tag? I wonder what is the difference between th ...

  3. 您能否提供一些示例,说明为什么用正则表达式很难解析XML和HTML? [关闭]

    我看到人们一遍 又一遍地犯的一个错误是试图用正则表达式解析XML或HTML. 以下是难以解析XML和HTML的一些原因: 人们希望将文件视为一系列行,但这是有效的: <tag attr=&quo ...

  4. 何时将空间编码为加号(+)或%20?

    有时,空格会将URL编码为+符号,有时会将其编码为%20 . 有什么区别,为什么会发生这种情况? #1楼 +表示仅在application/x-www-form-urlencoded内容中的空格,例如 ...

  5. 总结网站调用Flash的几种方法【转】

    一.Adobe 提供的方法 <object width="200" height="200" classid="clsid:D27CDB6E-A ...

  6. JDBC 4.2 Specifications 中文翻译 -- 第九章 连接

    一个 Connection 对象,表示了与某个数据源的一条连接,数据源的种类可以是关系型数据库,文件系统等等之类,只要有对应的 JDBC 驱动,都可以称之为数据源.应用程序使用 JDBC API 来维 ...

  7. Jeremy Keith在 Fronteers 2010 上的主题演讲

    今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HTML5,但我并不打算这样做,因为如果你想了解HTML5的话,你可以Google,可以看书,甚 ...

  8. BUTTON标签和INPUT标签的区别【转】

    一句话概括主题:<button>具有<input type="button" ... >相同的作用但是在可操控性方面更加强大. HTML 4.01规范的Fo ...

  9. HTML <q> 标签的简单介绍

    HTML <q> 标签 实例 标记短的引用: <q>Here is a short quotation here is a short quotation</q> ...

  10. ASP.NET 4 和 Visual Studio 2010 Web 开发概述

    声明:本文是ASP.NET 白皮书 ASP.NET 4 and Visual Studio 2010 Web Development Overview 的阅读摘要,只是本人的学习记录,并非完整翻译,仅 ...

最新文章

  1. 欧拉角推算旋转矩阵的问题
  2. VTK:几何对象之OrientedCylinder
  3. 介绍一种Fiori标准应用的增强方式
  4. 可视化 —— 在线图形绘制
  5. 配置追踪者—Scylla v1(***测试工具)
  6. MyBatis使用foreach批量插入一个含List<实体>成员变量的实体类
  7. java使用easypoi实现word模板导出
  8. 如何修改ssh端口号
  9. neokylin linux s.iso,NeoKylin-Desktop-Personal-v6.0安装与基本应用实战
  10. 网站架构优化之css+div设计对SEO的影响
  11. 树莓派4b主板特点_树莓派4B的入手操作
  12. imutils基础(7)使用 OpenCV 查找轮廓中的极值点
  13. 硬核讲解 Jetpack 之 LifeCycle 使用篇
  14. 产品读书《人人都是产品经理 1.0》
  15. C语言常用语句之-循环语句
  16. Au 效果器详解:参数均衡器
  17. MOSS系列之五母版页和布局页Featur…
  18. win10 裝在NET Framework 3.5(包括.NET 2.0和3.0)
  19. python爬虫---一键采集ftx网站上的所有房源信息
  20. 3dmax 视图切换

热门文章

  1. 杭电计算机2010年笔试真题详解
  2. linux系统在不同的局域网中ip地址不变换的问题
  3. HDOJ--2112--
  4. DataGridView添加右键菜单等技巧
  5. 2016年大数据Spark“蘑菇云”行动之spark streaming消费flume采集的kafka数据Directf方式...
  6. angular.element 动态添加和删除元素
  7. 鼠标点击TextBox控件后清空默认字体
  8. SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database)...
  9. 第九集(第二部分)思科路由器IOS升级过程视频记录
  10. 计算机网络考前,《计算机网络原理》--考前复习资料.doc