【Spring Boot】构建RESTful服务 — RESTful简介
RESTful简介
本节将从基础的概念开始介绍什么是RESTful、RESTful的特点、RESTful中的资源、HTTP Method、HTTP Status,还将介绍RESTful和SOAP到底有哪些区别。
1.什么是RESTful
RESTful是目前流行的互联网软件服务架构设计风格。REST(Representational State Transfer,表述性状态转移)一词是由Roy Thomas Fielding在2000年的博士论文中提出的,它定义了互联网软件服务的架构原则,如果一个架构符合REST原则,则称之为RESTful架构。
REST并不是一个标准,它更像一组客户端和服务端交互时的架构理念和设计原则,基于这种架构理念和设计原则的Web API更加简洁,更有层次。
1.1 RESTful的特点
1)每一个URI代表一种资源。
2)客户端使用GET、POST、PUT、DELETE四种表示操作方式的动词对服务端资源进行操作:GET用于获取资源,POST用于新建资源(也可以用于更新资源),PUT用于更新资源,DELETE用于删除资源。
3)通过操作资源的表现形式来实现服务端请求操作。
4)资源的表现形式是JSON或者HTML。
5)客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都包含必需的信息。
符合RESTful规范的Web API需要具备如下两个关键特性:
- 安全性:安全的方法被期望不会产生任何副作用。当我们使用GET操作获取资源时,不会引起资源本身发生改变,也不会引起服务器状态的改变。
- 幂等性:幂等的方法保证了重复进行一个请求和一次请求的效果相同(并不是指返回客户端的响应总是相同的,而是指服务器上资源的状态从第一次请求后就不再改变)。在数学中,幂等性是指N次变换和一次变换的结果相同。
1.2 REST的产生背景
随着互联网的发展,前端页面与后端的数据交互越来越频繁,数据结构越来越复杂,REST的出现极大地简化了前后端数据的交互逻辑。如果我们把前端页面看作一种用于展示的客户端,那么API就是为客户端提供数据、操作数据的接口。这种设计可以获得极高的扩展性。
假设,原本大家通过PC上的网上商城购物,当需要扩展到手机等移动端时,只需要开发针对iOS和Android的两个客户端,通过客户端访问系统公共的Web API就可以完成通过浏览器页面提供的功能,而后端代码基本无须改动,如图所示。

RESTful风格的Web API支持我们使用统一的接口规范对接iOS、Android、HTML5和PC等客户端。正是由于REST有着众多优点,因此REST一经提出就迅速取代了复杂而笨重的SOAP,成为Web API的标准。
2.HTTP Method
什么是HTTP Method(HTTP方法)呢?
HTTP提供了POST、GET、PUT、DELETE等操作类型对某个Web资源进行Create、Read、Update和Delete操作。一个HTTP请求除了利用URI标志目标资源之外,还需要通过HTTP Method指定针对该资源的操作类型。下表介绍一些常见的HTTP方法及其在RESTful风格下的使用。

总结了主要的HTTP方法与资源URI结合使用的建议返回值。常见的HTTP Method(HTTP方法)有POST、GET、PUT、PATCH和DELETE,它们分别对应Create、Read、Update和Delete(或者CURD)操作。当然,还有许多其他方法,比如OPTIONS和HEAD等,但使用频率较低。
3.HTTP状态码
HTTP状态码就是服务向用户返回的状态码和提示信息,客户端的每一次请求,服务都必须给出回应,回应包括HTTP状态码和数据两部分。
HTTP定义了40个标准状态码,可用于传达客户端请求的结果。状态码分为以下5个类别:
- 1xx:信息,通信传输协议级信息。
- 2xx:成功,表示客户端的请求已成功接受。
- 3xx:重定向,表示客户端必须执行一些其他操作才能完成其请求。
- 4xx:客户端错误,此类错误状态代码指向客户端。
- 5xx:服务器错误,服务器负责这些错误状态代码。
RESTful API中使用HTTP状态码来表示请求执行结果的状态,适用于REST API设计的代码以及对应的HTTP方法,如表所示。

HTTP协议提供的状态码和HTTP Method。通过RESTful API返回给客户端的状态码和提示信息可以判断出Web API的请求和执行情况。
除了以上基本的HTTP请求状态码外,Web API服务端还需要定义业务相关的状态,如1000订单提交成功、1002订单修改成功等。每种状态码都有标准的解释,客户端只需查看状态码字典就知道相应业务的执行结果,所以服务端应该返回尽可能精确的状态码。
4.REST与SOAP的区别
随着互联网的发展,RESTful越来越流行,那么RESTful和SOAP到底有哪些区别?我们在设计Web服务时,到底是应该选择目前最流行的RESTful还是选择老牌的WebService呢?
SOAP(Simple Object Access Protocol,简单对象访问协议)是一种标准化的通信规范,主要用于Web服务。它有着严格的规范和标准,包括安全、事务等各个方面的内容,同时SOAP强调操作方法和操作对象的分离,使用WSDL文件规范和XSD文件分别对其定义。
RESTful简化了WebService的设计,它不再需要WSDL,而是通过最简单的HTTP协议传输数据(包括XML或JSON)。既简化了设计,也减少了网络传输量(因为只传输代表数据的XML或JSON,没有额外的XML包装)。
REST强制所有的操作都必须是无状态的,没有上下文的约束,不需要考虑上下文和会话保持的问题,极大地提高系统的可伸缩性。RESTful相对于SOAP更加简单明了,它并没有一个明确的架构标准,更像是一种设计风格,其核心是面向资源;而WebService基于SOAP协议,主要核心是面向活动。
相关文章:
【Spring Boot】构建RESTful服务 — RESTful简介
RESTful简介 本节将从基础的概念开始介绍什么是RESTful、RESTful的特点、RESTful中的资源、HTTP Method、HTTP Status,还将介绍RESTful和SOAP到底有哪些区别。 1.什么是RESTful RESTful是目前流行的互联网软件服务架构设计风格。REST(Representationa…...
模仿火星科技 基于cesium+水平面积测量+可编辑
当您进入Cesium的编辑水平积测量世界,下面是一个详细的操作过程,帮助您顺利使用这些功能: 1. 创建提示窗: 启动Cesium应用,地图场景将打开,欢迎您进入编辑模式。 在屏幕的一角,一个友好的提…...
26.配电网规划——考虑潮流约束的配电网规划
MATLAB代码直达:26.多时段-考虑潮流约束的配电网规划 clc;clear;close all; %% 导入数据 load(data.mat); MGpowerxlsread(MG1-3.xlsx); % 微电网的日负荷曲线 nt3 ; % 变压所个数 Sn25; % 变电所容量 MVA G…...
【云原生】K8S集群
目录 一、调度约束1.1 POT的创建过程1.1调度过程 二、指定节点调度2.1 通过标签选择节点 三、亲和性3.1requiredDuringSchedulingIgnoredDuringExecution:硬策略3.1 preferredDuringSchedulingIgnoredDuringExecution:软策略3.3Pod亲和性与反亲和性3.4使…...
python接口自动化之自动发送测试报告邮件
前言 SMTP(Simple Mail Transfer Protocol)也就是简单邮件传输协议,是一种提供可靠且有效电子邮件传输的协议。python的smtplib模块就提供了一种很方便的途径发送电子邮件,它对smtp协议进行了简单的封装。 python发邮件主…...
umi出现“Cannot find module ‘umi-build-dev/lib/routes‘“ 错误
确认安装的 Umi 版本是否正确:首先,检查项目中 package.json 文件中的 umi 的版本号是否正确,确保版本号与项目所需的版本一致。清除缓存并重新安装依赖:可以尝试使用以下命令清除 npm 缓存并重新安装依赖: npm cache …...
Redis类型检查与命令多态
Redis中用于操作键的命令基本上可以分为两种类型。 其中一种命令可以对任何类型的键执行,比如说DEL命令、EXPIRE命令 、RENAME命令、TYPE命令、OBJECT命令等。 举个例子,以下代码就展示了使用DEL命令来删除三种不同类型的键: # 字符串键 redis> SE…...
mysql支持的xa具体指的是什么?
在MySQL中,XA指的是一种事务协议(eXtended Architecture),用于支持分布式事务。XA协议允许应用程序跨多个独立的数据库资源(例如多个MySQL实例)执行分布式事务。 具体来说,XA协议提供了以下关键…...
IntelliJ Idea 编译时控制台上中文输出乱码
猜测原因是IDEA启动时未指定编码信息,故与系统编码保持一致(windows中文系统默认为GBK编码),当以UTF-8编码进行编译在控制台会以GBK编码输出,从而导致乱码 解决方案 指定Idea启动时JVM的默认编码为UTF-8 Help -> Edit Custom Options P…...
锚框【目标检测】
生成多个锚框 假设输入图像高为h,宽为w,我们以图像每个像素为中心生成不同形状的锚框,缩放比 s∈(0,1],宽高比为r>0。那么锚框的宽度和高度分别为和。当中心位置给定时, 已知宽和高的锚框是确定的。缩放比为锚框高与图像高的比值,然后得到一个正方形锚框面积。 …...
001-Spring boot 启动内置Web容器分析
目录 代码入口上下文容器 加载web容器WebServercreateWebServergetWebServerFactory():getWebServer(): 执行WebServer#start自动配置读取配置修改配置 代码入口 上下文容器 SpringApplication.run(App.class); //追踪下去发现 context createApplicationContext…...
【Cocos Creator 项目实战 】消灭星星加强版(附带完整源码工程)
本文乃Siliphen原创,转载请注明出处 目录 概述 游戏整体流程 游戏框架设计 单一职责的类 主要流程控制类 核心玩法模块 UI: 游戏世界: 本文项目的代码组织结构 作者项目实践总结 场景只有一个入口脚本 尽量少在节点上挂载脚本 构…...
2023软件测试岗必问的100个面试题【含答案】
一、测试理论 1.什么是软件测试? 答:软件测试是通过执行预定的步骤和使用指定的数据,以确定软件系统在特定条件下是否满足预期的行为。 2.测试驱动开发(TDD)是什么? 答:测试驱动开发是一种开…...
MediaExtractor MediaCodec手动解码播放音乐
MediaExtractor MediaCodec手动解码播放音乐,笔记 private class DecodeAudio implements Runnable {Overridepublic void run() {//开始播放pcmaudioTrack.play();MediaExtractor extractor null;MediaCodec codec null;Log.i(TAG, "run: init");FileOutputStrea…...
element表格+表单+表单验证结合运用
目录 一、结果展示 二、实现代码 一、结果展示 1、图片 2、描述 table中放form表单,放输入框或下拉框或多选框等; 点击添加按钮,首先验证表单,如果存在没填的就验证提醒,都填了就向下添加一行表单表…...
亚马逊云科技发布Amazon HealthScribe,使用生成式AI技术实现临床文档的自动生成
近日,亚马逊云科技在纽约峰会上推出了Amazon HealthScribe,该服务符合HIPAA(《健康保险流通与责任法案》)的相关要求,可为医疗软件供应商提供一种基于语音和文字识别的生成式AI技术,帮助其创建能够自动生成…...
Windows11安装Linux子系统,并实现服务自启动,局域网访问,磁盘挂载
Windows11安装Linux子系统,并实现服务自启动,局域网访问,磁盘挂载 一、准备工作二、安装Linux子系统(wsl2)三、为Linux子系统设置桥接网络检查wsl版本在 Hyper-V 管理器中创建虚拟交换机创建 WSL 配置文件启动wsl 四、设置Windows开机自启动L…...
【Git】保姆级详解:Git配置SSH Key(密钥和公钥)到github
博主简介:22级计算机科学与技术本科生一枚🌸博主主页:是瑶瑶子啦每日一言🌼: “当人们做不到一些事情的时候,他们会对你说你也同样不能。”——《当幸福来敲门》 克里斯加德纳 Git配置SSH Key 一、什么是Git?二、什么…...
离线环境conda虚拟环境备份迁移--conda pack问题
1.第一步:创建虚拟环境 conda create -n pyenv --clone base 或者 conda create -n pyenv python3.8.5 --offline 命令执行结束,在路径/xxxx/anaconda/envs 下看到pyenv 或者 conda info --envs 查看罗列虚拟环境 2.第二步:打包环境 conda …...
挂载 IK 分词器至 Elasticsearch Docker 容器 - Docker Docker Compose 教程
简介 本博客将讲解如何在 Docker 和 Docker-Compose 中运行 Elasticsearch,并挂载 IK 分词器。 步骤 一、快速运行Elasticsearch:8.1.3 1.首先,我们需要创建一个新的 Docker 网络:"elastic"。这个网络会提供给我们接下来所要创…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
