转载自https://zhuanlan.zhihu.com/p/381554129

RESTful架构究竟是什么

别着急,想要了解RESTful,我们先来了解一位大佬Roy Thomas Fielding,一个出生于加州拉古纳海岸的伟大计算机科学家。一个集”HTTP协议(1.0版和1.1版)主要设计者“、"Apache服务器软件作者"、"Apache基金会第一任主席",这三大头衔于一身的伟大男人。

2000年,他在博士论文《Architectural Styles and the Design of Network-based Software Architectures》中首次提出了“REST”的概念。之后,这篇论文受到了广泛的关注,在当时的互联网界掀起了轩然巨波,对互联网的发展产生了深远的影响。

Fielding 所提出的"REST"可以看作是一种互联网软件架构原则,凡是符合REST原则的架构,都可称之为“RESTful"架构。

RESTful的英文全称为Representational State Transfer,直接翻译过来即为“表现层状态转化”,看到这儿,你可能还是不明白,到底什么是RESTful啊?可以用人话表示一下吗?其实“表现层”省略了主语,它指的是“资源”的表现层。下面,我们来慢慢详解有关内容。

1)资源(Resources)

RESTful中的资源指的是,互联网上的一个实体或是一条有价值的信息。资源可以是一段文本、一张图片、一首歌曲、一种服务。每种资源对应着一个特定的URL(Uniform Resource Locator)——统一资源定位符。

URI成为了每一个资源的地址,更像是独一无二的识别符。因此,从这个角度来看,所谓的“上网”,就是调用URL与互联网上的一些“资源”交互。

(2)表现层(Representation)

我们将互联网上,资源所呈现出来各中表现形式,称为它的“表现层”。例如,文本可以由TXT表现,也可由XMLHTMLJSON等形式表现。这些都属于文本的“表现层”。

(3)状态转化(State Transfer)

在访问互联网的过程中,必然存在着客户端和服务器的互动,因此也必然涉及着数据和状态的变化。

另外,互联网的通信协议是基于HTTP的无状态协议。这就意味着,所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,即前台想要访问后台资源时,必须通过一定的方法途径,让服务器端发生"状态转化"(State Transfer)。这种转化又恰好是发生在表现层之上的,所以这个过程就被称之为"表现层状态转化"。

由于基于HTTP协议,客户端来使服务端发生变化的操作也就是常用的GET、POST、PUT、DELETE这四个操作。GET----获取资源,POST----新建资源,PUT----更新资源,DELETE----删除资源。

因此,RESTful用一句话来概括就是”URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。"

(4)为什么要用RESTful架构?

近年来前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......),不同的前端设备与后端进行通信交互时,每一个都要写上不同的协议吗?

答案当然是不必须的,RESTful正是为解决此问题而诞生的。它可以通过一套统一的接口为 Web,iOS和Android等不同前端提供服务,建立统一的后台管理。

RESTful架构应具备条件

rest服务是一种Web服务架构,其目标是为了创建具有良好扩展性的分布式系统。

rest应该具备以下条件:

  • 使用客户/服务器模型

    (简称C/S结构,是一种网络架构,它把客户端 (Client) 与服务器(Server) 区分开来。 每一个客户端软件的实例都可以向一个服务器或应用程序服务器发出请求。)

    例如前后端分离,页面和服务不在同一服务器上运行。

  • 层次化的系统

    例如一个父系统下有多个子模块,每个模块都是独立的服务。

  • 无状态

    服务端并不会保存有关客户的任何状态,也就是说要服务后端服务,就要带token过去。

  • 可缓存

    例如服务端通过token缓存已登录过的用户信息,客户端请求会带一个token过来,后台服务通过带过来的token在缓存中取出用户信息,提高效率。

  • 统一的接口

    例如,一个项目的所有模块都整合到一起,all-in-one,打成一个包,多个服务,整合到一个端口下。

如果一个系统满足了上面所列出的五条约束,那么该系统就被称为是RESTful的(一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。)

一文读懂RESTful架构的更多相关文章

  1. kubernetes基础——一文读懂k8s

    容器 容器与虚拟机对比图(左边为容器.右边为虚拟机)   容器技术是虚拟化技术的一种,以Docker为例,Docker利用Linux的LXC(LinuX Containers)技术.CGroup(Co ...

  2. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  3. 即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

    本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享. 1.引言   Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡 ...

  4. 大数据篇:一文读懂@数据仓库(PPT文字版)

    大数据篇:一文读懂@数据仓库 1 网络词汇总结 1.1 数据中台 数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念. 数据中台是一套可持续"让企业的数据用起 ...

  5. 一文读懂Java动态代理

    作者 :潘潘 日期 :2020-11-22 事实上,对于很多Java编程人员来说,可能只需要达到从入门到上手的编程水准,就能很好的完成大部分研发工作.除非自己强主动获取,或者工作倒逼你学习,否则我们好 ...

  6. 一文读懂HTTP/2及HTTP/3特性

    摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...

  7. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  8. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...

  9. 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)

    一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25  16:29:19   对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...

随机推荐

  1. 【Jenkins】jenkins构建python项目提示:'python' 不是内部或外部命令,也不是可运行的程序或批处理文件

    一.问题:jenkins构建python项目提示:'python' 不是内部或外部命令,也不是可运行的程序或批处理文件 二.原因:要在jenkins配置本地环境变量 三.解决方案:添加python.e ...

  2. Python3使用request/urllib库重定向问题

    禁止自动重定向 python3的urllib.request模块发http请求的时候,如果服务器响应30x会自动跟随重定向,返回的结果是重定向后的最终结果而不是30x的响应结果. request是靠H ...

  3. Flink 实践教程:入门(6):读取 PG 数据写入 ClickHouse

    作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接.亚 ...

  4. [gym102769L]Lost Temple

    考虑第$i$列的答案,即找到一个区间$[l,r]$,使得: 1.$l$和$r$要同奇偶,令$ans=\frac{r-l}{2}$,要求尽量大($ans+1$即为该列答案) 2.$\forall 0\l ...

  5. 从ApacheTomcat架构谈面试到源码编译环境v10.0.12

    概述 开启博客分享已近三个月,感谢所有花时间精力和小编一路学习和成长的伙伴们,有你们的支持,我们继续再接再厉 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Tomcat官 ...

  6. Codeforces 1466G - Song of the Sirens(哈希)

    Codeforces 题面传送门 & 洛谷题面传送门 事实证明,有的难度评分不算很高.涉及的知识点不算很难的题目也能出得非常神仙 首先考虑如何暴力求答案.注意到一个文本串 \(T\) 在 \( ...

  7. 洛谷 P6177 - Count on a tree II/【模板】树分块(树分块)

    洛谷题面传送门 好家伙,在做这道题之前我甚至不知道有个东西叫树分块 树分块,说白了就是像对序列分块一样设一个阈值 \(B\),然后在树上随机撒 \(\dfrac{n}{B}\) 个关键点,满足任意一个 ...

  8. HDU 5322 Hope

    HDU 5322 Hope 考虑 $ dp[n] $ 表示 长度为 $ n $ 的所有排列的答案. 首先,对于一个排列来说,如果最大值在 $ i $ 位置,那么前 $ i - 1 $ 个数必然与 $ ...

  9. CF Edu Round 71

    CF Edu Round 71 A There Are Two Types Of Burgers 贪心随便模拟一下 #include<iostream> #include<algor ...

  10. docker_清华源国内的选择

    清华大学开源镜像官网:https://mirrors.tuna.tsinghua.edu.cn/ 前期: 在centos7 中的extras 源里面有docker 安装包,但是里面的安装包是比较旧的 ...