【RESTful】前后端的通信方式 REST

前后端的通信方式 REST

  • 1.初识 REST
    • 1.1 什么是 REST
    • 1.2 REST 的特征
  • 2.HTTP 方法与 CRUD 动作映射
  • 3.实现 REST 风格的 CRUD

1.初识 REST

1.1 什么是 REST

REST 是软件架构的规范体系结构,它将 资源的状态 以适合客户端的形式从服务器端发送到客户端(或相反方向)。在 REST 中,通过 URL 进行资源定位,用 HTTP 动作(GETPOSTDELETEPUSH 等)描述操作,完成功能。

🚀 REST 即 表述性状态传递(Representational State Transfer,简称 REST)是 Roy Fielding 博士在 2000 年他的博士论文中提出来的一种 软件架构风格(Software Architecture Style)。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。

🚀 REST 密切相关的两个名词:资源状态。可以说,资源 是 REST 系统的核心概念。所有的设计都会以资源为中心,包括如何对资源进行添加,更新,查找以及修改等。而资源本身则拥有一系列状态。在每次对资源进行添加 ,删除或修改的时候,资源就将从一个状态转移到另外一个状态。

遵循 RESTful 风格,可以使开发的接口通用。以便调用者理解接口的作用。基于 REST 构建的 API 就是 RESTful(REST 风格)API。

各大机构提供的 API 基本都是 RESTful 风格的,这样可以统一规范,减少沟通、学习和开发的成本。

1.2 REST 的特征

  • 客户 — 服务器client-server):提供服务的服务器和使用服务的客户端需要被隔离对待。
  • 无状态stateless):服务器端不存储客户的请求中的信息,客户的每一个请求必须包含服务器处理该请求所需的所有信息,所有的资源都可以通过 URI 定位,而且这个定位与其他资源无关,也不会因为其他资源的变化而变化。

Restful 是典型的基于 HTTP 的协议。HTTP 连接最显著的特点是:客户端发送的每次请求都需要服务器回送响应;在请求结束后,主动释放连接。从建立连接到关闭连接的过程称为 “一次连接”,前后的请求没有必然的联系,所以是无状态的。

  • 可缓存cachable):服务器必须让客户知道请求是否可以被缓存。
  • 分层系统layered System) :服务器和客户之间的通信必须被标准化。
  • 统一接口uniform interface):客户和服务器之间通信的方法必须统一,RESTful 风格的数据元操作 CRUD(createreadupdatedelete)分别对应 HTTP 方法:GET 用来 获取资源,POST 用来 新建资源,PUT 用来 更新资源,DELETE 用来 删除资源,这样就统一了数据操作的接口。
  • HTTP 状态码:状态码在 REST 中都有特定的意义:200201202204400401403500。比如,401 表示用户身份认证失败;403 表示验证身份通过了,但资源没有权限进行操作。
  • 支持按需代码Code-On-Demand,可选):服务器可以提供一些代码或脚本,并在客户的运行环境中执行。

2.HTTP 方法与 CRUD 动作映射

RESTful 风格使用同一个 URL,通过约定不同的 HTTP 方法来实施不同的业务。

普通网页的 CRUD 和 RESTful 风格的 CRUD 的区别,见表:

动作普通 CRUD 的 URL普通 CRUD 的 HTTP 方法Restful 的 URLRestful 的 CRUD 的 HTTP 方法
查询Article/id=1GETArticle/{id}GET
添加Article?title=xxx&body=xxxGET / POSTArticlePOST
修改Article/update?id=xxxGETArticle/{id}PUT 或 PATCH
删除Article/delete?id=xxxGETArticle/{id}DELETE

可以看出,RESTful 风格的 CRUD 比传统的 CRUD 简单明了,它通过 HTTP 方法来区分增加、修改、删除和查询。

3.实现 REST 风格的 CRUD

在 Spring Boot 中,如果要返回 JSON 数据,则只需要在控制器中用 @RestController 注解。 如果提交 HTTP 方法,则使用注解 @RequestMapping 来实现,它有以下两个属性:

  • Value:用来制定 URI。
  • Method:用来制定 HTTP 请求方法。

(1)获取列表采用的是 GET 方式,返回 List。例如,下面代码返回 Article 的 List。

@RequestMapping(value = "/", method = RequestMethod.GET)
public List<Article> getArticleList() {List<Article> list = new ArrayList<Article>(articleRepository.findAll());return list;
}

(2)增加内容(提交内容)采用的是 POST 方式,一般返回 String 类型或 int 类型的数据,见以下代码:

@RequestMapping(value = "/", method = RequestMethod.POST)
public String add(Article article) {articleRepository.save(article);return "success";
}

(3)删除内容,必须采用 DEIETE 方法。一般都是根据 id 主键进行删除的。

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable("id") long id) {articleRepository.deleteByld(id);return "success";
}

(4)修改内容,则用 PUT 方法。

@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public String update(Article model) {articleRepository.save(model);return "success";
}

(5)查询内容,和上面获取列表的方法一样,也是采用 GET 方法。

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Article findArticle(@PathVariable("id") Integer id) {Article article = articleRepository.findByld(id);return article;
}

对于 RESTful 风格的增加、删除、修改和查询,可以编写测试单元,也可以用 Postman 测试,分别用 GET、POST、PUT、DELETE 方法提交测试。虽然这样实现了 RESTful 风格,但还有一个问题 —— 返回的数据并不统一,在实际生产环境中还需要进行改进,所以需要设计统一的 RESTful 风格的数据接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小型简易GIT服务器搭建和使用

搭建GIT服务器的文章有很多&#xff0c;多数在管理的时候都使用了gitosis作为管理工具&#xff0c;但是作为一个小团队(人数少于50人)&#xff0c;我觉得完全可以使用公钥验证的方式&#xff0c;这样会简单不少&#xff0c;下面来看看简易的搭建方法吧。 服务器版本:ubuntu 16…

Unix\Linux 执行shell报错:“$‘\r‘: 未找到命令” 解决

linux执行脚本sh xxx.sh报错&#xff1a;$xxx\r: 未找到命令 原因&#xff1a;shell脚本在Windows编写导致的换行问题&#xff1a; Windows 的换行符号为 CRLF&#xff08;\r\n&#xff09;&#xff0c;而 Unix\Linux 为 LF&#xff08;\n&#xff09;。 缩写全称ASCII转义说…

第二证券:ppi指数是什么,ppi指数下降对股市有什么影响?

PPI全称Producer Price Index&#xff0c;PPI指数即“出产者价格指数”&#xff0c;反映的是一守时期内出产者购买中心产品和原材料价格的改动趋势和改动程度。 了解ppi指数&#xff1a; 简单了解便是&#xff0c;计算出出产者的本钱改动状况&#xff0c;然后反映到价格上。 …

windows@windows设备之间远程命令行控制方案@windows设备间使用OpenSSH

文章目录 abstract为什么考虑命令行连接讨论主题 powershell远程控制使用PowerShell远程管理前提条件&#xff1a;步骤&#xff1a;1. 启用WinRM服务2. 配置信任主机3. 测试连接4. 创建远程会话5. 运行远程命令6. 关闭会话 例子小结 SSH方案基础连接免密自动登录修改配置文件在…

【自学网络安全】:安全策略与用户认证综合实验

实验拓扑图&#xff1a; 实验任务&#xff1a; 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00-18:00)可以访问&#xff0c;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不允许访问Dmz区…

新闻资讯整合平台:一站式满足企业信息需求

摘要&#xff1a; 面对信息爆炸的时代&#xff0c;企业如何在海量数据中快速获取有价值资讯&#xff0c;成为提升竞争力的关键。本文将探讨如何通过一站式新闻资讯整合平台&#xff0c;实现企业信息需求的全面满足&#xff0c;提升决策效率&#xff0c;同时介绍实用工具推荐&a…

Redis数据类型和数据队列

一.Redis数据类型 参考资料&#xff1a;http://www.redis.cn/topics/data-types.html 相关命令参考: http://redisdoc.com/ Redis 是一种基于内存的开源数据结构存储系统&#xff0c;支持多种数据类型&#xff0c;每种数据类型都有自己特定的操作命令。 String&#xff08;字…

Games101学习笔记 Lecture17 Materials and Appearances

Lecture17 Materials and Appearances 材质 BRDF一、Diffuse/Lambertian Material二、Glossy Material三、Ideal reflective/ refractive Material (BSDF)1.镜面反射2.镜面折射3.菲涅尔项 Fresnel 四、Microfacet BRDF 微表面五、Isotropic / Anisotropic Materials (BRDFs)An…

博客标题:C++中的继承:构建面向对象的基石

目录 ​编辑 引言 继承的基本形式 示例1&#xff1a;基本继承 继承的类型 示例2&#xff1a;不同类型的继承 多重继承 示例3&#xff1a;多重继承 继承与多态性 示例4&#xff1a;继承与多态 结论 结尾 引言 在面向对象编程&#xff08;OOP&#xff09;中&#xff…

【持续集成_03课_Linux部署Sonar+Gogs+Jenkins】

一、通过虚拟机搭建Linux环境-CnetOS 1、安装virtualbox&#xff0c;和Vmware是一样的&#xff0c;只是box更轻量级 1&#xff09;需要注意内存选择&#xff0c;4G 2、启动完成后&#xff0c;需要获取服务器IP地址 命令 ip add 服务器IP地址 通过本地的工具&#xff0c;进…

新手教学系列——crontab 使用不当引发的服务器性能问题

起因及症状 最近,我们的一台服务器随着运行时间的增加,逐渐出现了压力过大的问题。具体表现为数据库连接数飙升至 4000+,Redis 频繁超时,系统报错文件打开数过多等。针对这些问题,我们逐一检查了数据库连接池、Redis 连接池以及系统的 ulimit 配置,但都未能找到问题的根…

第241题| 确定极限中参数问题 | 武忠祥老师每日一题

解题思路&#xff1a;确定极限中的参数的方法是求这个极限&#xff1b;求极限根据类型选方法。 形可以用到三种方法&#xff1a;洛必达&#xff0c;等价&#xff0c;泰勒。 先观察题目&#xff0c;将看成一个整体&#xff0c;同时,并令,整理之后如下&#xff1a; 这里也要想办…

mysql怎么调整缓冲区大小

MySQL中调整缓冲区大小是数据库性能优化的重要一环。缓冲区大小直接影响了数据库的读写性能和响应速度。以下是一些常见的MySQL缓冲区及其调整方法&#xff1a; 一、InnoDB缓冲池&#xff08;InnoDB Buffer Pool&#xff09; InnoDB缓冲池是InnoDB存储引擎用来缓存表数据和索…

代码随想录第7天 454 、 383 、15、18

代码随想录第7天 454. 四数相加 II 思路就是先统计nums1和num2各个元素之和出现的次数&#xff0c;然后遍历num3和nums4各个元素之和&#xff0c;看其相反数是否在map中&#xff0c;若在加上出现次数 class Solution { public: int fourSumCount(vector<int> &num…

nginx.conf配置文件

1、全局模块 worker_processes 1; 工作进程数&#xff0c;一般设置成服务器内核数的2倍&#xff08;一般不超过8个&#xff0c;超过8个反而会降低性能&#xff0c;一般是4个&#xff0c;1-2个也可以&#xff09; 处理进程的过程必然涉及配置文件和展示页面&#xff0c;也就是…

高斯过程的定义

高斯过程 1. 高斯过程的定义2. 协方差矩阵的构建3. 协方差矩阵的性质3.1. 计算挑战3.2. 解决方法 1. 高斯过程的定义 高斯过程可以看作是对函数的分布&#xff0c;它假定任何有限数量的函数值的集合服从一个多元高斯分布。给定输入数据点集合 { x 1 , x 2 , … , x n } \left…

2024.7.9作业

1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include <stdio.h> #include <string.h> int main(int argc,const char *argv[]) { char arr[30]{0}; int zm0,kg0,sz0,qt0; printf("请输入字符串&…

OpenStack是一个开源的云计算平台

OpenStack是一个开源的云计算平台&#xff0c;由多个组件组成&#xff0c;这些组件协同工作&#xff0c;提供包括计算、网络、存储和身份服务在内的基础设施即服务(IaaS)。OpenStack最初由NASA和Rackspace合作开发&#xff0c;目的是创建一个开放源代码的云操作系统。 OpenSta…

智慧光伏一站式解决方案

光伏电站智慧化管理平台&#xff0c;将现代先进的数字信息技术、通信技术、互联网技术、云计算技术、大数据挖掘技术与光伏技术高度融合而形成。可以满足光伏企业对电站的高发电量、低初始投资、低运维成本等需求&#xff0c;从开发到运维的25年生命周期内&#xff0c;实现高收…

使用clion刷leetcode

如何优雅的使用clion刷leetcode 安装插件&#xff1a;LeetCode Editor) 插件配置&#xff1a; 这样我们每打开一个项目&#xff0c;就会创建类似的文件 我们的项目结构&#xff1a; 我们在题解文件中导入头文件myHeader.h并将新建的文件添加到cmakelists.txt文件&#xff0c;…