RESTful API 架构解读
RESTful API 架构解读
首先我们还是先介绍下 RESTful api 的来龙去脉。 首先, RESTful (下文都简称 RESTful api 为 RESTful )
1、RESTful 这个概念最早是在 2000年 Roy Thomas Fielding 博士在他的博士论文《Architectural Styles and the Design of Network-based Software Architectures》 中提出了几种软件应用的架构风格,REST作为其中的一种架构风格在这篇论文的第5章中进行了概括性的介绍。 (其实我很好奇,为何国内的开发者们没能做出这些 标准通用级别的 规范)
这里 我们需要理解的就是 RESTful 它不是一种 类似于 http/https 的规范,而是一种 web 的架构。 而 RESTful 架构风格主要包含了
1)采用 URI 标识资源
2)用 '链接' 关联相关的资源
3)使用标准的 http 方法
4)支持多种资源表示方式
5)无状态性
接下来,就用着五点 继续往下介绍。
一、采用 URI 标识资源
首先 标识资源 中的 资源 指的是什么?
在任何 在客户端能够访问到的 任何形式(图片、文字、音频、视频等)的 事物均可以理解为资源。
同时, 存储在数据库中的数据也可以理解为资源。
并且 通过 uri 标识以后,任何在客户端能够访问到的资源 均有一个或者多个标识。
然后 我们通过 uri 访问静态资源,访问数据库请求后返回的数据等等。例如:
https://vuejs.com.cn/#/use/start/1 (当前id=1的用户信息)
https://vuejs.com.cn/#/use/resource/2017/09 (2017年九月份所有留言信息)
https://vuejs.com.cn/#/base/color/2017 (2017新增用户)
这样 一个简单的 uri 就具备了很强的标志性 和 可读性。除此之外 uri 还能够比较清晰的获取到静态资源路径。
所以站在 存在即为合理的角度来思考的话,既然该 uri 存在,那么此 uri 必须是 标识某个资源而存在。
二、用 '链接' 关联相关的资源
这里的 ‘链接’ 就是我们常常说的 url, url 和上面说到的 uri有什么区别呢?
恩,说到这里,我们就来详细的介绍下 uri、url、urn 三者之间的关系和区别。
uri (uniform resource identifier 统一资源标识符)
url (uniform resource locator 统一资源定位器)
urn (uniform resource name 统一资源命名)
也就是说,URI是以一种抽象的,高层次概念定义统一资源标识,而URL和URN则是具体的资源标识的方式。URL和URN都是一种URI。
介绍完 url 下面就说到访问一个页面, 页面中可能存在 文字、图片、视频等文件展示。 这里就是关联了相关资源。一个 url 关联了 图片、文字、视频 这三个资源。
三、使用标准的 http 方法
这里标准的用法, 概括起来包含了 这7种
GET (从服务器取出资源)
POST (在服务器新建一个资源)
PUT (在服务器更新资源(客户端提供改变后的完整资源))
PATCH (在服务器更新资源(客户端提供改变的属性))
DELETE (从服务器删除资源)
HEAD (获取资源的元数据)
OPTIONS (获取信息,关于资源的哪些属性是客户端可以改变的)
后面二种 为不常用方法。 GET 方法相信大家都很熟悉了。 这里解释一下 POST 和 PUT 方法。虽然 通过发送POST和PUT请求均可以添加一个新的资源,但是两者的不同之处在于:对于前者,请求着一般不能确定标识添加资源最终采用的URI,即服务端最终为成功添加的资源指定URI;对于后者,最终标识添加资源的URI是可以由请求者控制的。也正是因为这个原因,如果发送PUT请求,我们一般直接将标识添加资源的URI作为请求的URI;对于POST请求来说,其URI一般是标识添加资源存放容器的URI。
简单点说就是 post 方法 可以将要新增的 资源 放在 data 中而不一定非得放在 uri 中。 而 put 方法新增资源的时候,资源必须放在 uri 中。
这就是 使用标准 http 方法中的 方法, 在日常的开发过程中 最常用的就是 post 和 get 方法了。当然了 post 和 get 方法也是有很大区别来的。
区别呢? 分为2点:
1) get 请求需要将 请求所带参数放在请求的 url 中。 而 post 需要将 请求所带参数放在 http 包的包体中。
2)get 方法提交数据最大只能是 1024 字节。 而 post 理论上是没有上限的。
好了~ http 方法相关的内容就这么多。
四、支持多种资源表示方式
这里的 多种资源表示方式需要解释下, 资源 和 资源的表示 是两个意思。 资源是一个笼统的概念, 资源的表示方式 则为 具体的 资源内容呈现方法。
这里就是需要说明一下 在 请求返回 其实返回的不是资源 而是 资源的表现形式。
五、无状态性
RESTful只要维护资源的状态,而不需要维护客户端的状态。对于它来说,每次请求都是全新的,它只需要针对本次请求作相应的操作,不需要将本次请求的相关信息记录下来以便用于后续来自相同客户端请求的处理。
这里可以理解为 RESTful 的 Web 上展示的任何信息均为通过 资源获取的方式来获得。 所以任何状态值都是通过 请求返回 回来的。
so~ 今天先到这里。 如有错误欢迎指正。
RESTful API 架构解读的更多相关文章
- 深入理解 RESTful Api 架构
转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api 就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...
- RESTful api架构设计
阮老师的这两篇文章足够了 理解 RESTful 架构 RESTful API 设计指南
- Restful API 架构与设计参考原则
1. 什么是RESTREST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的博 ...
- SpringBoot RESTful API 架构风格实践
如果你要问 Spring Boot 做什么最厉害,我想答案就在本章标题 RESTful API 简称 REST API . 本项目源码下载 1 RESTful API 概述 1.1 什么是 RESTf ...
- RESTful API架构和oauth2.0认证机制(概念版)
1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...
- (转载https://segmentfault.com/a/1190000016313947)了解RestFul Api架构风格设计
最近几年REST API越来越流行,特别是随着微服务的概念被广泛接受和应用,很多Web Service都使用了REST API. REST是HTTP规范主要编写者之一的Roy Fielding提出的, ...
- RESTful API URI 设计: 查询(Query)和标识(Identify)
相关文章:RESTful API URI 设计的一些总结. 问题场景:删除一个资源(Resources),URI 该如何设计? 应用示例:删除名称为 iPhone 6 的产品. 是不是感觉很简单呢?根 ...
- 移动互联网实战--Web Restful API设计和基础架构
前言: 在移动互联网的大潮中, Web Restful API逐渐成为Web Server重要的一个分支. 移动端和服务端的交互, 主流的方式还是通过Http协议的形式来进行. 请求以Get/Post ...
- RESTful架构解读
什么是REST REST与技术无关,代表的是一种软件架构风格.REST全称是Representational State Tranfer, 表征性状态转移. REST从资源的角度类审视整个网络,它将分 ...
随机推荐
- 持续交付Jenkins使用
简介 Jenkins是一个独立的开源自动化服务器,可用于自动化各种任务,如构建,测试和部署软件.Jenkins可以通过本机系统包Docker安装,甚至可以通过安装Java Runtime Enviro ...
- Bash 脚本进阶,经典用法及其案例
前言:在linux中,Bash脚本是很基础的知识,大家可能一听脚本感觉很高大上,像小编当初刚开始学一样,感觉会写脚本的都是大神.虽然复杂的脚本是很烧脑,但是,当我们熟练的掌握了其中的用法与技巧,再多加 ...
- 转:【Java并发编程】之十一:线程间通信中notify通知的遗漏(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17228213 notify通知的遗漏很容易理解,即threadA还没开始wait的时候,t ...
- go golang 笔试题 面试题 笔试 面试
go golang 笔试题 面试题 笔试 面试 发现go的笔试题目和面试题目还都是比较少的,于是乎就打算最近总结一下.虽然都不难,但是如果没有准备猛地遇到了还是挺容易踩坑的. 就是几个简单的笔试题目, ...
- 团队作业8——第二次项目冲刺(Beta阶段)--5.26 sixth day
团队作业8--第二次项目冲刺(Beta阶段)--5.26 sixth day Day six: 会议照片 项目进展 Beta冲刺的第四天,以下是今天具体任务安排: 队员 昨天已完成的任务 今日计划完成 ...
- 第二次项目冲刺(Beta阶段)5.19
1.提供当天站立式会议照片一张 会议内容: ①新成员加入,熟悉团队. ②制定新一轮的任务计划. 2.每个人的工作 (1)工作安排 队员 今日进展 明日安排 王婧 #42文件分类改为按个人分类 #42文 ...
- bean的单例
通过改变中的scope属性,默认是singleton单例.而prototype则指定每getbean得到的都是不同实例. 验证代码: ①:验证默认singleton //验证<bean id=& ...
- 201521123055 《Java程序设计》第3周学习总结
1. 本章学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 学号:201521123116 《java程序设计》第二周学习总结
1. 本章学习总结 一:学习了string的类型,string的对象是不可变的,创建之后不能再修改 二:SET PATH/CLASSPATH和-cp的用法. 三:学习了Java API 文档的使用方法 ...
- Python数据类型方法精心整理,不必死记硬背,看看源码一切都有了
Python认为一切皆为对象:比如我们初始化一个list时: li = list('abc') 实际上是实例化了内置模块builtins(python2中为__builtin__模块)中的list类: ...