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

【Spring Boot】详解restful api

目录

1.restful api

1.1.历史

1.2.内容

1.3.传参

2.Spring Boot中的Restful Api


1.restful api

1.1.历史

RESTful API(Representational State Transferful Application Programming Interface)是一种设计风格,用于构建基于网络的应用程序接口(API)。它基于一组原则和约定,旨在使不同的计算机系统能够通过 HTTP 协议相互通信和交换数据。

RESTful 架构风格的历史可以追溯到 2000 年,由 Roy Fielding 在他的博士论文 "Architectural Styles and the Design of Network-based Software Architectures" 中首次提出。他在论文中描述了 REST(Representational State Transfer)的概念,并介绍了一组原则和约定,用于设计和构建分布式网络应用程序。

以下是 RESTful 架构风格的主要历史发展阶段:

  1. 博士论文(2000 年):Roy Fielding在他的博士论文中首次提出了 REST 的概念。他强调了分布式系统设计中资源的重要性,以及通过使用统一接口和状态转移的方式来实现系统的可伸缩性、性能和可扩展性。

  2. Web 2.0 时代(2000 年代中期):随着 Web 的发展,REST 开始获得更多关注。许多 Web 2.0 应用程序采用了 RESTful 架构,使其能够更有效地交换数据和与客户端进行通信。

  3. 移动应用的兴起(2010 年代):随着智能手机和移动应用的兴起,RESTful API 成为连接移动客户端与后端服务的主要方式。许多社交媒体、电子商务和其他类型的应用程序开始采用 RESTful 架构。

  4. 微服务架构(2010 年代后期至今):RESTful API 也在微服务架构中得到广泛应用。微服务架构通过将应用程序拆分为小型、独立的服务来提高可维护性和可伸缩性,而 RESTful API 则成为这些服务之间通信的一种标准方式。

1.2.内容

RESTful API总结起来内容如下:

  1. 资源和标识符:在 RESTful API 中,每个资源都有一个唯一的标识符(URI),用于唯一标识该资源。资源可以是实际对象、数据、服务等。

  2. 统一接口:RESTful API 使用统一的 HTTP 方法(GET、POST、PUT、DELETE 等)来执行操作,如获取资源、创建资源、更新资源和删除资源。

  3. 状态无关性:RESTful API 是无状态的,每个请求都应该包含足够的信息来理解和处理请求,而不需要维护会话状态。

  4. 缓存:RESTful API 支持缓存,可以提高性能和减少网络流量。

  5. 客户端-服务器:RESTful API 将客户端和服务器解耦,使它们可以独立进行开发和扩展。

  6. 分层系统:RESTful API 支持分层系统架构,其中每个层都可以独立修改和优化,从而提高了系统的灵活性和可伸缩性。

  7. 按需代码:服务器可以在需要时将代码传送到客户端,以实现功能的扩展。

  8. 面向资源:RESTful API 设计应该围绕资源进行,而不是围绕操作进行。

  9. 自描述消息:RESTful API 的请求和响应消息应该是自描述的,使开发者能够理解其含义。

以上的所有内容,其核心其实就一个就是第2点,使用统一的 HTTP 方法(GET、POST、PUT、DELETE 等)来执行操作,如获取资源、创建资源、更新资源和删除资源。

以对用户的增删改查为例,rest api总结起来就是:

HTTP方法URL功能
GET/user获取用户
POST/user增加用户
PUT/user修改用户
DELETE/user删除用户

1.3.传参

rest api规范中对传参没有强制规定,但是有一些工程实践总结出来的优秀经验,常用的传参方式如下

  1. URL 路径参数:将参数直接包含在 URL 路径中。这通常用于标识资源的唯一标识符,如获取特定用户的信息。

    示例:GET /users/{id}

  2. 查询字符串参数:将参数作为查询字符串的一部分包含在 URL 中。这用于传递过滤条件、分页信息等。

    示例:GET /users?role=admin&page=1&limit=10

  3. 请求体参数:将参数包含在请求体中,通常在创建或更新资源时使用。数据通常以 JSON 或 XML 格式发送。

    示例:

    • POST /users,请求体:{"username": "john", "email": "john@example.com"}

    • PUT /users/{id},请求体:{"email": "newemail@example.com"}

2.Spring Boot中的Restful Api

Spring MVC中本身就自带

@GetMapping

@PostMapping

@PutMapping

@DeleteMapping

这些注解可以轻松实现Restful api,唯一需要注意的就是传参。

Spring Boot支持Restful Api将参数放在路径里:

@GetMapping("/user/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {// 根据 id 查询用户信息并返回
}

如果参数太多,支持放在http报文的body里:

@PostMapping("/user")
public ResponseEntity<User> createUser(@RequestBody User user) {// 创建用户并返回创建后的用户信息
}

Rest Api规范里建议要给出规范的响应码,Spring Boot里提供了ResponseEntity 类来构建响应,可以设置状态码、头部信息和响应体。

@GetMapping("/user/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.getUserById(id);if (user != null) {return ResponseEntity.ok(user);} else {return ResponseEntity.notFound().build();}
}

相关文章:

【Spring Boot】详解restful api

目录 1.restful api 1.1.历史 1.2.内容 1.3.传参 2.Spring Boot中的Restful Api 1.restful api 1.1.历史 RESTful API&#xff08;Representational State Transferful Application Programming Interface&#xff09;是一种设计风格&#xff0c;用于构建基于网络的应用…...

LISTAGG 函数

# LISTAGG 函数 对于查询中的每个组&#xff0c;LISTAGG 聚合函数根据 ORDER BY 表达式对该组的行进行排序&#xff0c;然后将值串联成一个字符串。 ## 语法: sql LISTAGG( [DISTINCT] aggregate_expression [, delimiter ] ) [ WITHIN GROUP (ORDER BY order_list) ] …...

485modbus转profinet网关连三菱变频器modbus通讯配置案例

本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式&#xff0c;使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关&#xff0c;用户可以有效地管理和监控设备&#xff0c;从…...

1024节日

程序员节日...

【@EnableWebMvc的原理】

用途 启用SpringMvc 的 Java 配置类&#xff0c;代替 xml 格式的配置文件。 一、查看运用&#xff08;注解 EnableWebMvc &#xff0c;实现 WebMvcConfigurer &#xff09; Component("com.ibicd") EnableWebMvc public class AppConfig implements WebMvcConfigu…...

css3 2d转换transform详细解析与代码实例transform

CSS3 Transform是CSS3的一个模块&#xff0c;其目的是为了通过对元素的变形、旋转、缩放、平移等操作&#xff0c;能够更加丰富的展示页面效果。下面是CSS3 Transform的详细解析与代码实例&#xff1a; transform属性 transform属性用于对元素进行变形操作&#xff0c;其属性…...

点亮现代编程语言的男人——C语言/UNIX之父Dennis Ritchie

祝各位程序员们1024程序员节快乐&#x1f389;&#x1f389;&#x1f389; 图片来自网络&#xff0c;侵删 前言 在程序员中&#xff0c;有一位人物的不被人熟知&#xff0c;他的贡献甚至比他自身更要出名 C语言之父&#xff0c;UNIX之父——Dennis MacAlistair Ritchie 一…...

找不到msvcp100.dll解决教程

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“msvcp100.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题&#xff0c;本文将介绍四个修复msvcp100.dll丢失的方法&#xff0c;帮助读者快速恢复计算机的正常运…...

萃取和constexpr

最近重温了一下萃取发现其与constexpr有相似之处&#xff0c;记录如下。 一、引出萃取 STL的在中心思想是将容器和算法分开&#xff0c;再通过迭代器iterator这一迭代器来将两者粘合起来。 通过迭代器进行算法计算&#xff0c;需要涉及两个问题&#xff1a; 问题一.通常需要…...

决策树完成图片分类任务

数据集要求&#xff1a; 训练集 和 验证集 &#xff08;要求分好&#xff09; 图片放置规则 &#xff1a; 一个总文件夹 放类别名称的子文件夹 其中子文件夹 为存放同一类别图片 举个例子 分类动物 则 总文件夹名称为动物 子文件夹为 猫 狗 猪猪 。。。 其中猫的文件夹里面…...

Docker 容器全部停止命令

Docker是一个开源的容器化平台&#xff0c;它可以帮助开发者快速构建、部署和运行应用程序。在使用Docker时&#xff0c;我们通常会创建多个容器来运行不同的服务或应用。当我们需要停止所有的容器时&#xff0c;可以使用一些命令来实现。本文将介绍几种常见的停止所有Docker容…...

对GRUB和initramfs的小探究

竞赛时对操作系统启动过程产生了些疑问&#xff0c;于是问题导向地浅浅探究了下GRUB和initramfs相关机制&#xff0c;相关笔记先放在这里了。 内核启动流程 在传统的BIOS系统中&#xff0c;计算机具体的启动流程如下&#xff1a; 电源启动&#xff1a;当计算机的电源打开时&…...

springboo单机多线程高并发防止重复消费的redis方案

springboo单机多线程高并发防止重复消费的redis方案 仅提供方案与测试。 想法&#xff1a;第一次收到userCode时&#xff0c;检查是否在redis中有&#xff0c;如果有&#xff0c;就表明已经消费了&#xff0c;返回抢单失败&#xff1b;否则&#xff0c;就去消费&#xff0c;顺…...

Java架构师内功数据库

目录 1 导学2 数据库基本概念2.1 数据库系统2.2 三级模式-两级映像2.3 数据库设计2.4 数据模型2.4.1 E-R模型2.4.2 关系模型2.5 关系代数3 规范化和并发控制3.1 函数依赖3.2 键与约束3.3 范式3.3.1 第一范式1NF3.3.2 第二范式3.3.3 第三范式3.4 模式分解3.5 并发控制3.6 封锁协…...

踩着节日的小尾巴

节日快乐...

UG\NX二次开发 设置视图中心 UF_VIEW_set_center

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 a1794902437 订阅本专栏,非常感谢。 简介 UG\NX二次开发 设置视图中心 UF_VIEW_set_center。如果视图NULL_TAG,则使用工作视图。 效果 代码 #include &qu…...

leetcode做题笔记201. 数字范围按位与

给你两个整数 left 和 right &#xff0c;表示区间 [left, right] &#xff0c;返回此区间内所有数字 按位与 的结果&#xff08;包含 left 、right 端点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;left 5, right 7 输出&#xff1a;4示例 2&#xff1a; 输入&…...

游戏盾如何有效防护DDoS

从进入计算机时代以来&#xff0c;DDoS攻击一直是网络世界中的一大威胁&#xff0c;让无数服务陷入瘫痪。这种攻击的原理非常简单&#xff1a;攻击者使用大量的僵尸主机或蠕虫病毒&#xff0c;向目标服务器发送海量请求&#xff0c;迅速耗尽服务器的资源&#xff0c;使其无法继…...

JavaScript中的类型转换

将值从一种类型转换为另一种类型&#xff0c;a -> ‘a’ ,称为类型转换。转换分为两种&#xff0c;一种显式的&#xff0c;一种隐式的&#xff0c;隐式的往往也是强制类型转换。强制类型转换总是返回标量基本类型&#xff0c;不会返回对象和函数。 如何区分&#xff1f; 类型…...

01-JVM 内存结构

JVM 内存结构 Java 虚拟机的内存空间分为 5 个部分&#xff1a; 程序计数器Java 虚拟机栈本地方法栈堆方法区 JDK 1.8 同 JDK 1.7 比&#xff0c;最大的差别就是&#xff1a;元数据区取代了永久代。元空间的本质和永久代类似&#xff0c;都是对 JVM 规范中方法区的实现。不过…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

【Linux系统】Linux环境变量:系统配置的隐形指挥官

。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量&#xff1a;setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...