彻底理解 RESTful

restful理解 Restful已经是目前我们耳熟能详的概念了,但是找了下网上的文章,大部分都是介绍restful API范式。很少介绍resetful架构的。今天同大家介绍下对restful的理解。此外,阮一峰的文章也很不错,感兴趣的同学也可以参考。理解RESTful架构 - 阮一峰的网络日志 什么是RESTful Representational state transfer - Wikipedia中的解释是... 阅读详情

内容转载于https://zhuanlan.zhihu.com/p/37980590

内容列表

  • REST 的出处
  • REST 的概念
  • REST 的推导与其特征
  • REST 与 HTTP 、URI 的关系
  • REST 的使用示例与描述
  • 开发 RESTful API 的流行框架
  • 总结

 

REST 的出处

 

REST 这个概念是 Roy Thomas Fielding 2000 年在加州大学欧文分校 (UNIVERSITY OF CALIFORNIA, IRVINE) 的 博士论文 中提出。在该论文中作者讨论和比较了传统基于网络应用架构的一些特点,传统架构的的缺点在于随着系统的进化组件的独立性和扩展性以及跨平台跨语言有很大局限性,在这样的前提下作者提出了 REST 概念, REST 用于指导设计和开发 Web 体系架构。所以 REST 只是一个架构思想,不是任何技术,就像作者在论文中提到的

  • REST, a novel architectural style for distributed hypermedia systems; and,(REST,一种新颖的分布式超媒体系统的架构风格)

 

REST 的概念

 

在网上搜索 RESTful 出现的最多的一个词就是 "表现层状态转移",如果没有真正了解 REST 或者 HTTP 看到这句话马上得到一个结果: "这句话不是说给人听的"。在论文中作者对于这个概念是这样说的:

The name "Representational State Transfer" is intended to evoke an image of how a well-designed Web application behaves: a network of web pages (a virtual state-machine), where the user progresses through the application by selecting links (state transitions), resulting in the next page (representing the next state of the application) being transferred to the user and rendered for their use.

"Representational State Transfer" 旨在提醒人们设计良好的 web 应用行为应该是: 用户在一个 web 页面,通过点击一个链接,服务器返回下一个页面。

如果到这里, 依然云里雾里,很正常,接下来请抛开这个概念。讨论一些看似无关的问题,最后返回来理解这句话。

 

REST 的推导与其特征

 

在论文开始论文 摘要 中,作者这样提到:

The World Wide Web has succeeded in large part because its software architecture has been designed to meet the needs of an Internet-scale distributed hypermedia system. The Web has been iteratively developed over the past ten years through a series of modifications to the standards that define its architecture. In order to identify those aspects of the Web that needed improvement and avoid undesirable modifications, a model for the modern Web architecture was needed to guide its design, definition, and deployment.

www 万维网的成功很大程度上在于其软件架构满足了可伸缩的分布式超媒体系统的需要。网络一直迭代开发在过去的十年里通过一系列修改标准,定义它的架构。为了确定网络的哪些方面需要改进和避免不必要的修改,需要一个现代Web体系结构模型来指导其设计、定义和部署。

作者参与了 HTTP/1.0 和 URI 的设计,在此过程中认识到需要为万维网如何工作提供一个模型,这个模型就是 REST。REST 架构旨在提高组件的独立性和伸缩性和置换性。例如: 之前传统 web 应用架构模式基本是这样:在论文中第五节,作者叫做 Null Style (零架构)

Null Style 零架构

所谓的零架构,没有明显的组件交互,像早期的静态网站所有内容都是静态 html 网页,后来的动态生成 html, java 中的 springmvc struts 等。即使像 springmvc 这样的架构本质上数据模块(数据组件)与显示层(显示组件)依然是耦合在一块。如果随着业务的发展,显示组件的跨平台性,数据组件的可伸缩性与独立性,这些基于网络应用的重要因素(跨平台,可伸缩)都无法体现。

Client-Server 客户端-服务端架构

在 Null Style (零架构)的基础上进入一步推导到 Client-Server 架构: 将显示组件与数据组件分割

这种架构解决了零架构的显示组件跨平台与数据组件的可伸缩与独立性。客户端可以根据需要添加新的客户端,旧的服务器接口对于新客户端依然有效。服务端可以根据业务需要扩展新的服务端,通过负载均衡为客户端提供服务,服务端的添加或者修改客户端无法感知,这解决了数据组件的独立性和扩展性。

Client-stateless-Server 架构

在 Client-Server 架构的基础上进一步推导到 Client-stateless-Server 架构: 客户端与服务端的交互必须是无状态的,像 http 协议那样

 

stateless (无状态)交互意味着每次请求是独立的,每次请求无法感知和依赖另一个请求的存在,这保证了请求的可靠性。由于服务器无需存储请求之间的状态和管理请求之间的资源信息使得服务端更加简单。但是也造成一个问题就是由于每次请求都是独立的,所以每次请求都需要携带所有需要的信息因为服务端不保存之前请求的状态和资源信息,所以会造成网络性能降低和携带重复的数据。

Client-cache-stateless-Server 架构

在 Client-stateless-Server 架构的基础上进一步推导到 Client-cache-stateless-Server 架构: 在客户端添加缓存机制解决或者抵消这种架构模式带来的性能缺陷,客户端可以通过缓存重用重复的响应。

统一接口

在基于网络的 REST 架构风格重点强调接口的统一: 服务端需要提供标准的可见接口,保证其他系统可见,保证每个系统独立发展。论文中作者为统一的接口提出四点指导原则:

  1. identification of resources (标识资源),通过 URI 唯一标识资源
  2. manipulation of resources through representations (资源的操作方式标识)操作资源的方式,通过 HTTP POST、GET、...
  3. self-descriptive messages (自描述信息)客户端请求需要告诉接受什么样的格式,是否缓存
  4. hypermedia as the engine of application state (超媒体是应用表述的核心)

 

以上四点: Client-Server (客户端-服务端)、Stateless (无状态)、Cache(可缓存)、统一接口。是作者在论文中提到的 REST 四个特点,REST 为了进一步满足对于互联网的可伸缩的要求,作者还提到了系统的分层设计和按需编码。

分层设计

按需编码

以上便是作者在论文中根据传统架构设计的过程,推导出 REST 架构应该具有的几个特点: 客户端-服务端模型、无状态、可缓存、统一接口、分层系统、按需编码

在论文最后,作者这样写到: REST 架构试图为现代 web 架构提供一个指导原则,它试图最小化网络延迟,同时最大化组件的独立性和可伸缩性,以满足分布式超媒体系统对于可伸缩网络的需要。

这样的架构风格就是 REST

 

REST 与 HTTP 、 URI 的关系

 

作者在论文第六节有提到 www 万维网就是 REST 的最好实践,HTTP 和 URI 就是 REST 的实践。回想一下作者对于 "Representational State Transfer" 的定义:"旨在提醒人们基于网络的应用最好的设计就是: 在一个 web 页面中,用户点击一个链接,然后为用户返回下一个页面。"这个概念是万维网的本质,万维网之所以成功就在于通过 link (链接) 将文档链接,用户通过点击链接获取文档。那么试想是不是我们对于资源(图片、文本、json、xml ...)的获取,是不是也应该与 linke (链接)的初衷更加契合,这样会使得我们系统的架构设计更加符合网络应用的可伸缩的需求。

REST 使用 HTTP 作为各组件的交流协议,使用 URI 作为资源定位, 数据的组织形式可以采用流行的格式例如: json 或者 xml 等。

 

REST 的使用示例和描述

 

如下图就是使用 REST 架构的典型示例,客户端(IOS、Android、Angular...) 与数据业务(Business Logic & Service)分离,这符合 Client-Server ,数据业务和服务更加独立和更大可伸缩性,客户端拥有跨平台跨语言的特征。这张图展现了 REST 架构的宏观信息。

 

 

下图展现了 REST 架构中服务端 API 接口的微观信息:

接口通过 URI 唯一标识了资源(task),这符合 REST 接口统一的第一条原则(资源唯一标识)。通过 HTTP 不同方法定义了操作该资源的方式,这符合接口统一的第二条规则(资源的操作方式标识)。因为 REST 是以资源为对象,所以接口设计时 URI 的设计应该使用名词不要使用动词至于操作的方式原则第二条可以指定,URI 的功能在于标识资源的唯一性而不需要体现操作方式信息。REST 的数据组织方式可以使用流行的数据格式(json、xml....)目前最流行的是使用 json。

 

开发 RESTful API 的流行框架

 

支持开发 RESTful API 的框架 java 有

  • Jersey
  • Resteasy
  • SpringMVC
  • ....

其他语言就不列举了.

关于如何设计良好的 RESTful API 最佳实践可以看这篇文章: 良好的 RESTful API 设计原则

 

总结

 

REST 架构将处理对象抽象为资源通过 URI 唯一标识资源地址,使用 HTTP 作为传输协议,使用流行数据格式作为数据组织方式。各组件通过统一接口交互,使得各组件尽可能独立和可伸缩满足基于网络的分布式超媒体系统可伸缩网络的需要。在我自己理解而言, REST 的灵魂所在正像作者在论文中提到的那样,旨在提醒设计良好的网络应用就像万维网超链接那样,在一个页面用户点击一个链接为用户返回下一个页面,在 REST 中这个链接就是 REST API 的 URI 地址,这样的设计使得互联网上的所有资源都更像万维网中的 link (链接),你只要点击它就会获得新的资源,更加契合万维网的本质。如果这样理解,再返回去看 "表现层状态转移" 这个概念就不是那么难以理解了。

3D点云处理:PointNet++与PointTransformer的对比 摘要: 3D点云处理中,PointNet++和PointTransformer是两种主流深度学习模型。PointNet++通过分层采样和分组策略提取局部特征,而PointTransformer利用自注意力机制捕捉全局上下文。实验表明,PointTransformer在分类(ModelNet40准确率92.1%)和分割(ShapeNet mIoU 85.7%)任务上性能更优,但计算开销较大(训练时间180秒/轮)。PointNet++在实时性场景更具优势(训练时间120秒/轮)。未来可结合两者优势,或优化Tr 阅读详情

相关推荐

带你学习Android中的ContentObserver

通过使用,开发者可以有效地监听系统设置的变化,例如屏幕亮度等。这种机制使得应用能够动态响应系统设置的更改,提升用户体验。在实现需要与系统设置交互的应用时,合理使用是非常重要的。

执剑人 1311

restful路径变量和缓存协议

浏览器具有缓存的功能,缓存的本质是为了:使用缓存能直接从本地读取数据,减少向服务器请求数据,缓解服务器压力。使用缓存能提高浏览器的二次渲染的时间,以及减少用户的流量消耗。

fei33423的专栏 248

Rokid眼镜高精度图像识别的五大工程破局点

图像识别是AR交互的基础能力,其核心在于将现实图像映射为可计算的数字特征,并通过几何建模解算空间姿态。在专用AR眼镜场景中,该过程面临光学畸变、传感器时序错位、低延迟跟踪与人因适配等复合挑战。尤其在工业现场,Rokid Max系列的鱼眼镜头畸变、IMU-视觉异步采样、窄FOV下快速眼动等物理约束,使传统基于AR Foundation或OpenCV的识别方案失效。本文聚焦真实部署中的关键瓶颈,涵盖实时反畸变纹理渲染、原生SDK直调优化、端侧轻量CNN模型(TinyImageNet-Rokid)、IMU-视觉紧

weixin_33681778的博客 697

初学 HTTP [状态码 Restful Headers 缓存]

HTTP 常见状态码 1 开头 表示服务器接收到请求(使用较少) 2 开头 表示加载成功 200 加载成功 3 开头 表示重定向 301永久重定向 302 临时重定向 304 缓存未改变 4 开头 表示客户端错误 404 页面未找到 5 开头 表示服务端错误 Restful 风格 url 与传统的url相比,restful是将url看作一种功能,传统url是定义为一种定位资源 传统风格url 查询 /user/query?name=tom GET 详情 /user/getInfo?id=1

u014688172的博客 427

STC8H DMA 串口1全双工中断方式收发通讯C语言

串口1全双工中断方式收发通讯程序。 通过PC向MCU发送数据, MCU将收到的数据自动存入DMA空间. 当DMA空间存满设置大小的内容后,通过串口1的DMA自动发送功能把存储空间的数据原样返回. 用定时器做波特率发生器,建议使用1T模式(除非低波特率用12T),并选择可被波特率整除的时钟频率,以提高精度。

czhaii的专栏 1466

DDR5中的On-Die Termination(ODT)详解:电阻值支持及其背后的秘密

DDR5支持多档ODT电阻值,范围从40Ω到480Ω,均基于240Ω标准参考电阻RZQR_{ZQ}RZQ​。不同电阻档位对应不同的信号负载和功耗需求。校准电压点关键,常用0.8×VDD进行精准调校。CA信号间ODT匹配必须严格控制,保证命令总线稳定。选择合适的ODT值是高速内存设计中不可忽视的细节。

weixin_43199439的博客 2096

RESTful接口设计规范

RESTful是目前最流行的API设计规范,它是用于Web数据接口的设计。从字面可以看出,他是Rest式的接口,所以我们先了解下什么是Rest。REST与技术无关,它代表的是一种软件架构风格,REST它是 Representational State Transfer的简称,中文的含义是: “表征状态转移” 或 “表现层状态转化”。它是基于HTTP、URI、XML、JSON等标准和协议,支持轻量级、跨平台、跨语言的架构设计。

浮游的博客 6419

图解电动汽车:电动汽车电控系统

电动汽车的电控系统通常包含三个子控制系统 —— 整车控制器、电池管理系统、驱动电机控制器。 整车控制器 VCU 整车控制器 VCU(Vehicle Control Unit)作为电动汽车的中央控制单元,是整个控制系统的核心,也是各个子系统的调控中心。VCU 的主要功能就是协调管理整车的运行状态,包括采集电机及电池状态,采集加速踏板信号、制动踏板信号、执行器及传感器信号,根据驾驶员的意图综合分析做出相应判定后,监控下层的各部件控制器的动作,它负责汽车的正常行驶、制动能量回馈、整车发动机及动力电池的能量管理、.

程序员「阿基米东」的编程之旅 1万+

Restfult风格的统一缓存架构设计

Restfult风格的统一缓存架构设计 概述 基于Restful的架构风格已被广泛接收,因为Restful对资源URI的命名要求、对资源操作明确的动词语义,在很大程度上影响了Web应用的整体架构设计。 本文以一个简单的CURD操作为例,讨论基于Restful的缓存设计,抛砖引玉,共通探讨。 本文中的示例代码可以从下面地址下载:https://github.com/hubin

hubin0011的专栏 2773

【人工智能】Spring AI项目在定义 `response_format` 的 Invalid schema for response_format ‘custom_schema‘

确保。

奶爸的编程之路,也就一周冷个三天 562

Python爬虫实战【房产刚需专属】:爬取链家/贝壳完整房源数据,精准筛选刚需房源【房价+户型+地段+面积+装修】

本次爬虫的核心亮点就是刚需专属筛选,我已经把刚需买房的主流筛选逻辑封装为独立函数,你只需要修改筛选参数,就能精准匹配你的需求无需懂Python语法,直接改数字/文字即可!本次爬虫是刚需买房+Python爬虫实战的完美结合。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1824

杂谈|RestFul和http的区别

今天和我一组的小伙伴,在对接一个接口时,客户将DELETED请求设置了body参数,导致一个功能反复搞了半天,今天就来说下这两者的区别HTTP(HyperText Transfer Protocol)是一种用于从WWW(万维网)服务器传输超文本到本地浏览器的传输协议。它使得浏览器可以更加高效地工作,同时减少网络传输量。HTTP采用了请求/响应模型,客户端向服务器发送一个请求,服务器返回相应的响应。请求消息(Request Message):由请求行、请求头、空行和消息体组成。

程序员LSP 5205

关于React Native Android找不到node的错误

最近,按照官方文档初始化了一个React Native项目,但是在Android端运行的时候,报了如下的一个错误。 org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:recordFilesBeforeBundleCommandDebug'. Caused by: org.gradle.process.internal.ExecException: A problem occurred starting p

xiangzhihong8的专栏 4246

作者推荐 | 一文深度解读 — 彻底认识与理解微服务技术之Rest与Restful架构精髓

在微服务架构的演进过程中,我们不难发现,服务间的调用方式正悄然发生变革,逐渐从传统的RPC调用向HTTP调用过渡。在日常工作中,时常听闻同事提及为其他系统提供微服务并暴露Restful接口。然而,对于许多初学者来说,RESTful接口这一概念仍显得模糊,其与REST的关系更是令人费解。Rest,其全称是,我们可以将其视为“资源状态转换在分布式系统的设计中,Rest以其独特的架构方法占据了一席之地,这一理念的开创者Roy Fielding,在博士论文中首次提出了这一思想。资源是信息的载体,是对信息的核心抽象。

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。 1653

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

什么是RESTful接口,今天彻底搞懂它

RESTful 接口是基于 REST(Representational State Transfer) 架构风格设计的 Web API 接口。它使用 HTTP 协议中的方法(如 GET、POST、PUT、DELETE)来操作资源,并遵循一系列约定,使得接口具有一致性、简洁性和可扩展性。

0.85度的博客 1万+

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

什么是RESTful,讲讲我理解的RESTful。

一、什么是RESTful 面向资源 简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。 先看REST是什么意思,英文Representational state transfer 表述性状态转移 其实就是对 资源 的表述性状态转移。 (什么是表述性:就是指客户端请求一个资源,服务器拿到的这个资源,就是表述) 资源的地址 在web中就是URL (统一资源...

riemann_的博客 5614

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RestFul是什么?怎样理解RestFul?

RestFul是目前最流行的一种互联网软件架构它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用,REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、 Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。......

weixin_44232093的博客 4916

什么是 restful,讲讲你理解的 restful

REST(Representational State Transfer,表述性状态转移)是由 Roy Fielding 在他的博士论文中提出的概念。RESTful API 是遵循 REST 原则设计的 Web 服务接口。RESTful 是一种现代 Web 开发中广泛应用的 API 设计风格,它通过简洁的接口和标准的 HTTP 方法实现了高效的资源操作。理解 RESTful 的核心原则和设计模式有助于构建高性能、可扩展且易于维护的分布式应用。

码出财富,敲出大千世界 1698

谈对RESTFUL api的理解

前言:restful出现的环境,什么是rest?以及出现的意义 1.REST的由来 全称:REST,全称是Resource Representational State Transfer,即:资源在网络中以某种形式进行状态转移。————所谓状态的转移,它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的...

weixin_44465584的博客 1737

对Restful的理解

什么是Restful? Restful是Roy Thomas Fielding这位大神在他的博士论文文中提出来。由于其超前的思想,在当时并未引起过多的注意。 直到近几年来,大概08年以后开始慢慢流行起来。 restful是一种设计思想。是Representational State Transfer的英文缩写:表现层状态转换或者表述型状态转换。这里省略了主语,是资源的表现型状态转换。 资源...

shemuel的技术笔记 2764

理解RESTful架构

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。 网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必须考虑,如何开发在互联网环境中使用的软件。 RESTful架构,就是目前最流行的一种互联网软件架构。它结构清...

Peter的博客 305

【RESTful】REST 与 RESTful 理解与实践

REST 与 RESTful 介绍与理解 文章目录REST 与 RESTful 介绍与理解一. REST 与 RESTful 简介二. REST 架构原则 一. REST 与 RESTful 简介 REST 全称表述性状态转移(Representational State Transfer)。是 Roy Fielding 博士在 2000 年发表的博士论文中提出的一种软件架构风格。REST 是一种针对于 Web Application 的设计和开发方式,其可以降低开发的复杂性,提高系统的可扩展性。RES

Fxtack的博客 1970

restful 简单理解

越来越多的人开始意识到,网站即软件,而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点。 网站开发,完全可以采用软件开发的模式。但是传统上,软件和网络是两个不同的领域,很少有交集;软件开发主要针对单机环境,网络则主要研究系统之间的通信。互联网的兴起,使得这两个领域开始融合,现在我们必须考虑,

adminyan的博客 1万+

理解RESTful

RESTful:一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 概述 REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统,比如 web 应用程序。它首次出现在 2000 年 Roy Fi

程序人生,算法世界 742

RESTful的理解

1.引言 作为一个有一点Web基础的程序员,时常听身边的大牛说构建什么RESTful风格的网站之类,说实话,一头雾水,直到我看到了这篇博文 https://blog.youkuaiyun.com/qq_21383435/article/details/80032375,文章不似其他的我看到的大部分介绍RESTful的文章那样千篇一律,高深莫测(可能是我水平不够),博主以一种通俗易懂的语言介绍了RESTful风...

Uncle-wuc 634

对restful 理解

1. 什么是restful     REST——Representational State Transfer,表现层状态转移。     如果一个架构符合rest原则,就称它为restful架构。     理解restful架构,首先要理解rest resources 表现层指的其实就是“资源”(resources)的表现层 representation state transfer

yinkaihui的博客 637
上一篇: Java常用锁的使用
下一篇: 我们必须要知道的RESTful服务最佳实践
ArtisticProgramming
博客等级 码龄8年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值