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 架构解读的更多相关文章

  1. 深入理解 RESTful Api 架构

    转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api  就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...

  2. RESTful api架构设计

    阮老师的这两篇文章足够了 理解 RESTful 架构 RESTful API 设计指南

  3. Restful API 架构与设计参考原则

    1. 什么是RESTREST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的博 ...

  4. SpringBoot RESTful API 架构风格实践

    如果你要问 Spring Boot 做什么最厉害,我想答案就在本章标题 RESTful API 简称 REST API . 本项目源码下载 1 RESTful API 概述 1.1 什么是 RESTf ...

  5. RESTful API架构和oauth2.0认证机制(概念版)

    1. 什么是REST REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Roy Fielding的 ...

  6. (转载https://segmentfault.com/a/1190000016313947)了解RestFul Api架构风格设计

    最近几年REST API越来越流行,特别是随着微服务的概念被广泛接受和应用,很多Web Service都使用了REST API. REST是HTTP规范主要编写者之一的Roy Fielding提出的, ...

  7. RESTful API URI 设计: 查询(Query)和标识(Identify)

    相关文章:RESTful API URI 设计的一些总结. 问题场景:删除一个资源(Resources),URI 该如何设计? 应用示例:删除名称为 iPhone 6 的产品. 是不是感觉很简单呢?根 ...

  8. 移动互联网实战--Web Restful API设计和基础架构

    前言: 在移动互联网的大潮中, Web Restful API逐渐成为Web Server重要的一个分支. 移动端和服务端的交互, 主流的方式还是通过Http协议的形式来进行. 请求以Get/Post ...

  9. RESTful架构解读

    什么是REST REST与技术无关,代表的是一种软件架构风格.REST全称是Representational State Tranfer, 表征性状态转移. REST从资源的角度类审视整个网络,它将分 ...

随机推荐

  1. yum的初步了解与使用

    什么是yum Yum(Yellow dog Updater,Modified)是一个基于RPM包管理的字符前端软件包管理器.能够从指定的服务器自动下载RPM包并且安装,可解决软件包相关依赖性,并且一次 ...

  2. sublime编辑器代码背景刺眼怎么修改?

    有些人觉得如上图大括号刺眼,怎么把它改得不那么刺眼呢? [第一步]打开Bracket Hightlighter插件的用户配置文件: 然后按ctrl+G跳转到第330行, 如图位置改为"sty ...

  3. JQuery中的表单验证及相关的内容

      前  言 JRedu Android应用开发中,经常要用到表单.既然用到了表单,那就不可避免的要用到表单的验证.但是,在提交表单时,但是,并不是,每次提交的表单内容都是正确的,如果 每次都将表单的 ...

  4. Swing-setBorder()用法-入门

    注:本文内容转自:Swing编程边框(Border)的用法总结.内容根据笔者理解稍有整理. 函数说明: public void setBorder(Border border) 设置此组件的边框.Bo ...

  5. 201521123014 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 有关继承的知识点 1.2 使用常规方法总结其他上课内容 多态性 相同的形态,不同的行为 例子: public class Manager extends Employee{ ...

  6. 201521123079《java程序设计》第3周学习总结

    1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...

  7. 201521123088《Java程序》第二周总结

    #1. 本章学习总结 ①java基本数据类型 ②String类对象使用 #2. 书面作业 使用Eclipse关联jdk源代码,并查看String对象的源代码(截图)?分析String使用什么来存储字符 ...

  8. 史上最全CentOS安装教程,图文结合

    这是我最近整理的一份最全的CentOS安装步骤,亲自测试步骤,步步都有截图,步骤清晰.按此教程可轻松装机,并且安装成功的主机能访问外部网络. 闲话不说,首先介绍一下本教程用到工具: VMware Wo ...

  9. Q:哪里可以注册hk域名?A:这里!这里!(小白绢挥手)

    注意!前方有一条比你妈手中的竹板还硬的推文出没······ 咳咳,清清喉咙,预备唱! (请自动代入甜蜜蜜的曲调) 甜蜜蜜你笑的甜蜜蜜  好像花儿开在春风里  开在春风里 在哪里在哪里见过你  .HK域 ...

  10. Modeling -> Mixamo auto rigging -> UE4 retargeting

    In general, there are 3 ways we can work with the Blender-UE4 pipeline:   1 Model character Export m ...