当前位置: 首页 > news >正文

【Spring实战】17 REST服务介绍

文章目录

    • 1. 为什么出现
    • 2. 拥有哪些优势
    • 3. Spring中的应用
    • 4. spring-boot-starter-data-rest
    • 总结

REST(Representational State Transfer)是一种软件架构风格,通常用于设计网络应用程序的服务接口。RESTful 服务是基于 REST 原则构建的网络服务。

1. 为什么出现

在 REST 服务出现之前 SOAP,CORBA,RPC,RMI 这些服务架构和通信协议被广泛使用。

在这里插入图片描述

  • SOAP(Simple Object Access Protocol)

    SOAP 是一种基于 XML 的协议,用于在网络上进行通信。它定义了一种规范的消息格式和一组规则,用于在分布式环境中交换结构化信息。SOAP 支持在不同操作系统和编程语言之间进行通信,但它的消息格式较为繁琐,相对复杂,且常常需要较多的开销。

  • CORBA(Common Object Request Broker Architecture)

    CORBA 是一种面向对象的分布式计算系统的标准,定义了一组规范,使得不同编程语言和平台上的对象能够相互通信。CORBA 通常使用 IIOP(Internet Inter-ORB Protocol)协议进行通信,但 CORBA 的实现通常比较庞大,复杂度高。

  • RPC(Remote Procedure Call)

    RPC 是一种允许程序在网络上请求服务而不必了解底层通信细节的协议。RPC 框架允许远程计算机上的程序像调用本地程序一样调用远程服务。然而,RPC 的实现通常依赖于特定的编程语言和平台,缺乏统一的标准。

  • RMI(Remote Method Invocation)

    RMI 是 Java 平台上用于实现分布式计算的一种机制。它允许在 Java 虚拟机上运行的对象调用在另一个 Java 虚拟机上运行的对象的方法。然而,RMI 主要面向 Java 环境,不具备与其他平台和语言的轻松集成。

以上这些它们通常较为复杂,需要开发者处理许多细节,且缺乏一种统一、简单、轻量级的设计理念。 正是因为它们有着这些不足,就有了 REST 的出现来弥补这些不足,提供了一种更加简单、灵活、基于标准的通信方式,使得各种应用和服务能够更加轻松地相互协作。

2. 拥有哪些优势

在这里插入图片描述

  • 简单性和可读性

    REST 服务的设计理念使得 API 更加直观,易于理解并且可以快速上手

  • 可伸缩性

    由于 REST 服务是无状态的,服务器不需要维护大量的会话信息,所以更容易扩展提高了可伸缩性

  • 通用性

    REST 服务使用标准的 HTTP 协议,因此通用性非常好,使得不同技术栈的系统能够轻松地集成

  • 易于缓存

    REST 服务允许响应被缓存,在响应中设置合适的缓存标识,减轻服务器的负担提高客户端访问速度

3. Spring中的应用

Spring Framework 对 REST 服务提供了丰富的支持,使得创建和使用 REST 服务变得更加简单和灵活,常用的有下图这些
此处只做简单的介绍,下一篇 【Spring实战】18 Spring中REST应用详细介绍 将会结合代码逐一详细说明

在这里插入图片描述

  • @RestController

    用于标识一个类是RESTful服务的控制器,结合 @Controller@ResponseBody 的功能

    表示这个类的所有方法都返回 JSON/XML 等数据,而不是视图

  • @RequestMapping

    用于映射 HTTP 请求的 URL 到控制器的方法 , 可以用在类级别和方法级别

  • @ResponseBody

    用于将方法的返回值直接写入 HTTP 响应体,而不是返回视图

  • @RequestBody

    用于将 HTTP 请求的内容(如 JSON)映射到方法的参数上

  • @RequestParam

    用于将 HTTP 请求参数映射到方法的参数上

  • @PathVariable

    用于从 URL 模板中提取变量值,用于将 URL 中的部分作为方法参数传递

  • @ResponseStatus

    用于设置 HTTP 响应的状态码

  • @RequestHeader

    用于将 HTTP 请求头映射到方法的参数上

  • @GetMapping

    用于将 HTTP 请求方法映射到控制器的 GET 方法

  • @PostMapping

    用于将 HTTP 请求方法映射到控制器的 POST 方法

  • @DeleteMapping

    用于将 HTTP 请求方法映射到控制器的 DELETE 方法

  • @PutMapping

    用于将 HTTP 请求方法映射到控制器的 PUT 方法

  • @PatchMapping

    用于将 HTTP 请求方法映射到控制器的 PATCH 方法

  • @ExceptionHandler

    用于处理控制器方法中抛出的异常,返回自定义的错误响应

这些注解是在 Spring 中创建和使用 REST 服务时常用到的一些关键注解。通过合理地使用这些注解,可以轻松构建出清晰、灵活的 RESTful API。

4. spring-boot-starter-data-rest

Spring Boot 框架中的一个 Starter,用于简化和加速 RESTful 风格的数据暴露和操作。使用它可以使得开发者更加快速地创建具有标准化 RESTful API 的应用,尤其适用于简单的数据模型和操作,减少了手动编写 API 控制器的工作,提高了开发效率。尤其是针对与 Spring Data JPA(Java Persistence API)集成的应用。

总结

总体而言,REST 服务的出现是为了提供一种简单、灵活、可伸缩的分布式系统架构,使得各种应用和服务能够更加轻松地相互通信和协作。RESTful 架构的原则已经成为构建许多现代 Web 服务和 API 的基础。

相关文章:

【Spring实战】17 REST服务介绍

文章目录 1. 为什么出现2. 拥有哪些优势3. Spring中的应用4. spring-boot-starter-data-rest总结 REST(Representational State Transfer)是一种软件架构风格,通常用于设计网络应用程序的服务接口。RESTful 服务是基于 REST 原则构建的网络服…...

java struts2教务管理系统Myeclipse开发mysql数据库struts2结构java编程计算机网页项目

一、源码特点 java struts2 教务管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助 struts2 框架开发,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境 为TOMCAT7.0,Myeclipse8.5开发,数据库…...

跟着cherno手搓游戏引擎【3】事件系统和预编译头文件

不多说了直接上代码,课程中的架构讲的比较宽泛,而且有些方法写完之后并未测试。所以先把代码写完。理解其原理,未来使用时候会再此完善此博客。 文件架构: Event.h:核心基类 #pragma once #include"../Core.h" #inclu…...

排序算法之快速排序

快速排序是一种高效的排序算法,它的基本思想是采用分治策略,将一个无序数组分割成两个子数组,分别对子数组进行排序,然后将两个排序好的子数组合并成一个有序数组。快速排序的性能优于归并排序,尤其在处理大规模数据时…...

Docker 从入门到实践:Docker介绍

前言 在当今的软件开发和部署领域,Docker已经成为了一个不可或缺的工具。Docker以其轻量级、可移植性和标准化等特点,使得应用程序的部署和管理变得前所未有的简单。无论您是一名开发者、系统管理员,还是IT架构师,理解并掌握Dock…...

用IDEA创建/同步到gitee(码云)远程仓库(保姆级详细)

前言: 笔者最近在学习java,最开始在用很笨的方法:先克隆远程仓库到本地,再把自己练习的代码从本地仓库上传到远程仓库,很是繁琐。后发现可以IDEA只需要做些操作可以直接把代码上传到远程仓库,也在网上搜了些…...

【Linux】进程控制深度了解

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握Linux下的进程控制 > 毒鸡汤&#xff…...

kbdnso.dll文件缺失,软件或游戏报错的快速修复方法

很多小伙伴遇到电脑报错,提示“kbdnso.dll文件缺失,程序无法启动执行”时,不知道应该怎样处理,还以为是程序出现了问题,想卸载重装。 首先,先要了解“kbdnso.dll文件”是什么? kbdnso.dll是Win…...

Spring技术内幕笔记之IOC的实现

IOC容器的实现 依赖反转: 依赖对象的获得被反转了,于是依赖反转更名为:依赖注入。许多应用都是由两个或者多个类通过彼此的合作来实现业务逻辑的,这使得每个对象都需要与其合作的对象的引用,如果这个获取过程需要自身…...

kotlin foreach 循环

java中的foreach循环也使用于kotlin ,先回顾下java里面的foreach循环 java foreach循环格式 for(元素类型t 元素变量x : 遍历对象obj){引用了x的语句;} 例如: int[] intary {1,2,3,4};for (int a: intary) {Log.d("intary", String.value…...

分享相关知识

直接使用海龟图进行创作移动动态的游戏 这段代码是一个简单的turtle模块实现的小游戏,主要功能包括: 窗口和无人机初始化: 创建了一个turtle窗口,设置了窗口的背景颜色和标题。创建了一个表示无人机的turtle,形状为正…...

RabbitMQ(七)ACK 消息确认机制

目录 一、简介1.1 背景1.2 定义1.3 如何查看确认/未确认的消息数? 二、消息确认机制的分类2.1 消息发送确认1)ConfirmCallback方法2)ReturnCallback方法3)代码实现方式一:统一配置a.配置类a.生产者c.消费者d.测试结果 …...

ubuntu 编译内核报错

Ubuntu 编译 Linux 内核经常会遇到如下错误: 如果报错 canonical-certs.pem: 如下: make[1]: *** No rule to make target ‘debian/canonical-certs.pem’, needed by ‘certs/x509_certificate_list’. Stop. make: *** [Makefile:1868: …...

Python之自然语言处理库snowNLP

一、介绍 SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是&…...

C# 语法进阶 委托

1.委托 委托是一个引用类型,其实他是一个类,保存方法的指针 (指针:保存一个变量的地址)他指向一个方法,当我们调用委托的时候这个方法就立即被执行 关键字:delegate 运行结果: 思…...

开源可观测性平台Signoz(四)【链路监控及数据库中间件监控篇】

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 前文链接: ​​开源可观测性平台Signoz系列(一)【开篇】​​ ​​开源可观测性平台Signoz&…...

【嵌入式开发 Linux 常用命令系列 4.2 -- git .gitignore 使用详细介绍】

文章目录 .gitignore 使用详细介绍.gitignore 文件的位置.gitignore 语法规则使用示例注意事项 .gitignore 使用详细介绍 .gitignore 文件是一个特殊的文本文件,它告诉 Git 哪些文件或目录是可以被忽略的,即不应该被纳入版本控制系统。这主要用于避免一…...

【熔断限流组件resilience4j和hystrix】

文章目录 🔊博主介绍🥤本文内容起因resilience4j落地实现pom.xml依赖application.yml配置接口使用 hystrix 落地实现pom.xml依赖启动类上添加注解接口上使用 📢文章总结📥博主目标 🔊博主介绍 🌟我是廖志伟…...

微服务雪崩问题及解决方案

雪崩问题 微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。 如果服务提供者A发生了故障,当前的应用的部分业务…...

008、所有权

所有权可以说是Rust中最为独特的一个功能了。正是所有权概念和相关工具的引入,Rust才能够在没有垃圾回收机制的前提下保障内存安全。 因此,正确地了解所有权概念及其在Rust中的实现方式,对于所有Rust开发者来讲都是十分重要的。在本文中&…...

千里马2023年终总结-android framework实战

背景: hi粉丝朋友们: 2023年马上就过去了,很多学员朋友也都希望马哥这边写个年终总结,因为这几个月时间都忙于新课程halsystracesurfaceflinger专题的开发,差点都忘记了这个事情了,今天特别花时间来写个bl…...

vue3中pinia的使用及持久化(详细解释)

解释一下pinia: Pinia是一个基于Vue3的状态管理库,它提供了类似Vuex的功能,但是更加轻量化和简单易用。Pinia的核心思想是将所有状态存储在单个store中,并且将store的行为和数据暴露为可响应的API,从而实现数据&#…...

安装 yarn、pnpm、功能比较

安装 yarn 官网:https://classic.yarnpkg.com/ 快速、可靠和安全的依赖性管理。 Yarn是您代码的软件包管理器。它允许您使用和共享(例如JavaScript)与来自世界各地的其他开发人员一起编写代码。Yarn是一个新的快速安全可信赖的可以替代 NP…...

计算机专业个人简历范文(8篇)

HR浏览一份简历也就25秒左右,如果你连「好简历」都没有,怎么能找到好工作呢? 如果你不懂得如何在简历上展示自己,或者觉得怎么改简历都不出彩,那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…...

几个实用网站

论文短语:https://www.phrasebank.manchester.ac.uk/ 翻译:https://www.deepl.com/en/translator 润色:https://quillbot.com/ 榜单:www.paperwithcode.com ****NLP民工的乐园: 几乎最全的中文NLP资源库:****https…...

Pycharm 切换interpreter---python的环境和第三方库问题

这篇回答两个问题: 1.为什么在 pycharm中打开新的project,切换interpreter 之后发现自己之前装的库消失了? 2.为什么 interpreter 切换到python3.8了, terminal 还是在 3.9?? 问题的关键:搞懂什…...

TP-LINK 路由器忘记密码 - 恢复出厂设置

TP-LINK 路由器忘记密码 - 恢复出厂设置 1. 恢复出厂设置2. 创建管理员密码3. 上网设置4. 无线设置5. TP-LINK ID6. 网络状态References 1. 恢复出厂设置 在设备通电的情况下,按住路由器背面的 Reset 按钮直到所有指示灯同时亮起后松开。 2. 创建管理员密码 3. 上网…...

关闭 Elasticsearch 集群的安全性设置

关闭 Elasticsearch 集群的安全性设置,特别是如果您正在使用 X-Pack,涉及到修改 Elasticsearch 的配置。以下是一般步骤,但请注意,这可能会使您的 Elasticsearch 集群面临安全风险,因此建议仅在开发或测试环境中执行此…...

[技术分享]一招解决 MySQL 中 DDL 被阻塞的问题

爱可生开源社区. 爱可生开源社区,提供稳定的MySQL企业级开源工具及服务,每年1024开源一款优良组件,并持续运营维护。 背景 之前碰到客户咨询定位DDL阻塞的相关问题,整理了一下方法,如何解决DDL被阻塞的问题。下面,就这个问题,整理了一下思路: 怎么判断一个 DDL 是…...

Windows搭建Emby媒体库服务器,无公网IP远程访问本地影音文件

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中,观看视频绝对是主力应用场景之一&…...

香港域名注册商/广州seo网络优化公司

生物信息学跟计算机一样,更新换代都是比较快的,还不能说当年我们用的经典软件,可能在现代来说已经过时了,因而与时俱进对于生物信息人员来说是很重要的。当我们尝试使用EBI上的在线工具ClustalW2进行比对时,我们发现他…...

网站建设用哪种语言好/广告公司的业务范围

有些手机用久了,手机的音量就越来越小,相信很多人都碰到过这种情况,这个时候该怎么办呢?有没有办法来提高手机的音量呢?今天我就来介绍3种方法来提升手机的音量。方法一:开启手机的“单声道音频”。很多手机…...

中电云主机怎样登入创建的网站/能让手机流畅到爆的软件

1.Spring容器的实例化 1.1. 用构造器去实例化bean <!-- id/name属性用于执行bean的名称 用于从spring中获取这个对象, class用于指定bean的类型,会自动调用无参数构造器创建对象 --><beanid"calendarobj1"class"java.util.GregorianCalendar" /&…...

网页设计实训报告保利集团/台州优化排名推广

win7中设置 了 任务栏按钮 合并 之后 就看不到文字了,省空间,但是那种合并效果 让切换没那么顺利了.所以我喜欢 从不合并按钮. 但是win7蛋疼的 在从不合并之后,文字出来了,显得很占用空间,我开东西一多,就要翻页了.切换 窗口 没那么顺利了.不爽. 于是乎,我想 即 从不合并 任务栏…...

最好的网站建设价格/2022年国际十大新闻

Demo: ma125120.github.io/ma-dom/test… 本方法主要使用了 Range 对象和HTML5的Selection API&#xff0c;经过测试&#xff0c;本方法在主流浏览器如谷歌浏览器、火狐浏览器、360安全浏览器、搜狗高速浏览器中均运行良好。 先附上大家最想看的代码&#xff1a; function copy…...

网站建设服务兴田德润/优化网站标题名词解释

SET QUOTED_IDENTIFIER ON GO 是什么意思&#xff1f; 语法 SET QUOTED_IDENTIFIER { ON | OFF } 注释 当 SET QUOTED_IDENTIFIER 为 ON 时&#xff0c;标识符可以由双引号分隔&#xff0c;而文字必须由单引号分隔。当 SET QUOTED_IDENTIFIER 为 OFF 时&#xff0c;标识符不可加…...