【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 架构风格的主要历史发展阶段:
-
博士论文(2000 年):Roy Fielding在他的博士论文中首次提出了 REST 的概念。他强调了分布式系统设计中资源的重要性,以及通过使用统一接口和状态转移的方式来实现系统的可伸缩性、性能和可扩展性。
-
Web 2.0 时代(2000 年代中期):随着 Web 的发展,REST 开始获得更多关注。许多 Web 2.0 应用程序采用了 RESTful 架构,使其能够更有效地交换数据和与客户端进行通信。
-
移动应用的兴起(2010 年代):随着智能手机和移动应用的兴起,RESTful API 成为连接移动客户端与后端服务的主要方式。许多社交媒体、电子商务和其他类型的应用程序开始采用 RESTful 架构。
-
微服务架构(2010 年代后期至今):RESTful API 也在微服务架构中得到广泛应用。微服务架构通过将应用程序拆分为小型、独立的服务来提高可维护性和可伸缩性,而 RESTful API 则成为这些服务之间通信的一种标准方式。
1.2.内容
RESTful API总结起来内容如下:
-
资源和标识符:在 RESTful API 中,每个资源都有一个唯一的标识符(URI),用于唯一标识该资源。资源可以是实际对象、数据、服务等。
-
统一接口:RESTful API 使用统一的 HTTP 方法(GET、POST、PUT、DELETE 等)来执行操作,如获取资源、创建资源、更新资源和删除资源。
-
状态无关性:RESTful API 是无状态的,每个请求都应该包含足够的信息来理解和处理请求,而不需要维护会话状态。
-
缓存:RESTful API 支持缓存,可以提高性能和减少网络流量。
-
客户端-服务器:RESTful API 将客户端和服务器解耦,使它们可以独立进行开发和扩展。
-
分层系统:RESTful API 支持分层系统架构,其中每个层都可以独立修改和优化,从而提高了系统的灵活性和可伸缩性。
-
按需代码:服务器可以在需要时将代码传送到客户端,以实现功能的扩展。
-
面向资源:RESTful API 设计应该围绕资源进行,而不是围绕操作进行。
-
自描述消息:RESTful API 的请求和响应消息应该是自描述的,使开发者能够理解其含义。
以上的所有内容,其核心其实就一个就是第2点,使用统一的 HTTP 方法(GET、POST、PUT、DELETE 等)来执行操作,如获取资源、创建资源、更新资源和删除资源。
以对用户的增删改查为例,rest api总结起来就是:
| HTTP方法 | URL | 功能 |
|---|---|---|
| GET | /user | 获取用户 |
| POST | /user | 增加用户 |
| PUT | /user | 修改用户 |
| DELETE | /user | 删除用户 |
1.3.传参
rest api规范中对传参没有强制规定,但是有一些工程实践总结出来的优秀经验,常用的传参方式如下
-
URL 路径参数:将参数直接包含在 URL 路径中。这通常用于标识资源的唯一标识符,如获取特定用户的信息。
示例:GET /users/{id}
-
查询字符串参数:将参数作为查询字符串的一部分包含在 URL 中。这用于传递过滤条件、分页信息等。
示例:GET /users?role=admin&page=1&limit=10
-
请求体参数:将参数包含在请求体中,通常在创建或更新资源时使用。数据通常以 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(Representational State Transferful Application Programming Interface)是一种设计风格,用于构建基于网络的应用…...
LISTAGG 函数
# LISTAGG 函数 对于查询中的每个组,LISTAGG 聚合函数根据 ORDER BY 表达式对该组的行进行排序,然后将值串联成一个字符串。 ## 语法: sql LISTAGG( [DISTINCT] aggregate_expression [, delimiter ] ) [ WITHIN GROUP (ORDER BY order_list) ] …...
485modbus转profinet网关连三菱变频器modbus通讯配置案例
本案例介绍了如何通过485modbus转profinet网关连接威纶通与三菱变频器进行modbus通讯。485modbus转profinet网关提供了可靠的连接方式,使用户能够轻松地将不同类型的设备连接到同一网络中。通过使用这种网关,用户可以有效地管理和监控设备,从…...
1024节日
程序员节日...
【@EnableWebMvc的原理】
用途 启用SpringMvc 的 Java 配置类,代替 xml 格式的配置文件。 一、查看运用(注解 EnableWebMvc ,实现 WebMvcConfigurer ) Component("com.ibicd") EnableWebMvc public class AppConfig implements WebMvcConfigu…...
css3 2d转换transform详细解析与代码实例transform
CSS3 Transform是CSS3的一个模块,其目的是为了通过对元素的变形、旋转、缩放、平移等操作,能够更加丰富的展示页面效果。下面是CSS3 Transform的详细解析与代码实例: transform属性 transform属性用于对元素进行变形操作,其属性…...
点亮现代编程语言的男人——C语言/UNIX之父Dennis Ritchie
祝各位程序员们1024程序员节快乐🎉🎉🎉 图片来自网络,侵删 前言 在程序员中,有一位人物的不被人熟知,他的贡献甚至比他自身更要出名 C语言之父,UNIX之父——Dennis MacAlistair Ritchie 一…...
找不到msvcp100.dll解决教程
在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp100.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,本文将介绍四个修复msvcp100.dll丢失的方法,帮助读者快速恢复计算机的正常运…...
萃取和constexpr
最近重温了一下萃取发现其与constexpr有相似之处,记录如下。 一、引出萃取 STL的在中心思想是将容器和算法分开,再通过迭代器iterator这一迭代器来将两者粘合起来。 通过迭代器进行算法计算,需要涉及两个问题: 问题一.通常需要…...
决策树完成图片分类任务
数据集要求: 训练集 和 验证集 (要求分好) 图片放置规则 : 一个总文件夹 放类别名称的子文件夹 其中子文件夹 为存放同一类别图片 举个例子 分类动物 则 总文件夹名称为动物 子文件夹为 猫 狗 猪猪 。。。 其中猫的文件夹里面…...
Docker 容器全部停止命令
Docker是一个开源的容器化平台,它可以帮助开发者快速构建、部署和运行应用程序。在使用Docker时,我们通常会创建多个容器来运行不同的服务或应用。当我们需要停止所有的容器时,可以使用一些命令来实现。本文将介绍几种常见的停止所有Docker容…...
对GRUB和initramfs的小探究
竞赛时对操作系统启动过程产生了些疑问,于是问题导向地浅浅探究了下GRUB和initramfs相关机制,相关笔记先放在这里了。 内核启动流程 在传统的BIOS系统中,计算机具体的启动流程如下: 电源启动:当计算机的电源打开时&…...
springboo单机多线程高并发防止重复消费的redis方案
springboo单机多线程高并发防止重复消费的redis方案 仅提供方案与测试。 想法:第一次收到userCode时,检查是否在redis中有,如果有,就表明已经消费了,返回抢单失败;否则,就去消费,顺…...
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 ,表示区间 [left, right] ,返回此区间内所有数字 按位与 的结果(包含 left 、right 端点)。 示例 1: 输入:left 5, right 7 输出:4示例 2: 输入&…...
游戏盾如何有效防护DDoS
从进入计算机时代以来,DDoS攻击一直是网络世界中的一大威胁,让无数服务陷入瘫痪。这种攻击的原理非常简单:攻击者使用大量的僵尸主机或蠕虫病毒,向目标服务器发送海量请求,迅速耗尽服务器的资源,使其无法继…...
JavaScript中的类型转换
将值从一种类型转换为另一种类型,a -> ‘a’ ,称为类型转换。转换分为两种,一种显式的,一种隐式的,隐式的往往也是强制类型转换。强制类型转换总是返回标量基本类型,不会返回对象和函数。 如何区分? 类型…...
01-JVM 内存结构
JVM 内存结构 Java 虚拟机的内存空间分为 5 个部分: 程序计数器Java 虚拟机栈本地方法栈堆方法区 JDK 1.8 同 JDK 1.7 比,最大的差别就是:元数据区取代了永久代。元空间的本质和永久代类似,都是对 JVM 规范中方法区的实现。不过…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
【深度学习新浪潮】什么是credit assignment problem?
Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...
