当前位置: 首页 > 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 规范中方法区的实现。不过…...

Windows USB设备独占访问技术解决方案:UsbDk架构解析与实践指南

Windows USB设备独占访问技术解决方案&#xff1a;UsbDk架构解析与实践指南 【免费下载链接】UsbDk Usb Drivers Development Kit for Windows 项目地址: https://gitcode.com/gh_mirrors/us/UsbDk Windows系统对USB设备的严格管理限制了用户模式应用程序直接访问硬件的…...

从安装到调优:SenseVoiceSmall语音情感识别完整使用指南

从安装到调优&#xff1a;SenseVoiceSmall语音情感识别完整使用指南 1. 引言&#xff1a;为什么选择SenseVoiceSmall&#xff1f; 语音识别技术已经发展到了不仅能听懂我们在说什么&#xff0c;还能感知我们说话时的情绪状态。SenseVoiceSmall作为阿里巴巴达摩院开源的语音理…...

Youtu-VL-4B-Instruct快速上手:从拉取镜像到自定义端口,完整部署指南

Youtu-VL-4B-Instruct快速上手&#xff1a;从拉取镜像到自定义端口&#xff0c;完整部署指南 1. 环境准备与镜像拉取 在开始部署Youtu-VL-4B-Instruct之前&#xff0c;我们需要确保运行环境满足基本要求。这个轻量级但功能强大的视觉-语言模型需要特定的硬件和软件支持才能发…...

本地语音合成技术全解析:从架构设计到行业落地

本地语音合成技术全解析&#xff1a;从架构设计到行业落地 【免费下载链接】tts-vue &#x1f3a4; 微软语音合成工具&#xff0c;使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 一、技术价值&#xff1a;为何本地…...

【书生·浦语】internlm2-chat-1.8b部署避坑指南:模型拉取失败/响应延迟/中文乱码全解

【书生浦语】internlm2-chat-1.8b部署避坑指南&#xff1a;模型拉取失败/响应延迟/中文乱码全解 1. 环境准备与快速开始 在开始使用internlm2-chat-1.8b之前&#xff0c;我们先来了解一下这个模型的基本情况。这是一个拥有18亿参数的中文对话模型&#xff0c;专门针对聊天场景…...

告别鼠标流!用STM32CubeIDE快捷键玩转代码导航与重构(实战演示)

告别鼠标流&#xff01;用STM32CubeIDE快捷键玩转代码导航与重构&#xff08;实战演示&#xff09; 在嵌入式开发的世界里&#xff0c;效率就是生命线。当你面对一个庞大的STM32工程&#xff0c;频繁在数千行代码中穿梭时&#xff0c;每一次不必要的鼠标点击都在蚕食宝贵的开发…...

【面板数据】A股上市公司研发投入数据(2000-2024年)

数据简介&#xff1a;作为评估企业创新能力与可持续发展潜力的关键维度&#xff0c;上市公司研发投入呈现显著的行业差异化特征&#xff0c;但总体保持稳健增长态势。随着信息披露监管要求的持续强化&#xff0c;研发投入透明度已成为提升企业市场信誉的重要抓手。值得注意的是…...

GX Works2编程避坑指南:PLC数据传输指令(MOV/FMOV/BMOV)的5个常见错误与正确写法

GX Works2编程避坑指南&#xff1a;PLC数据传输指令的5个致命陷阱与工业级解决方案 在自动化产线的深夜调试现场&#xff0c;一个看似简单的MOV指令错误可能导致整条生产线异常停机——这种场景对PLC工程师来说绝不陌生。三菱GX Works2作为工业控制领域的标杆软件&#xff0c;其…...

SegFormer实战:5分钟搞定ADE20K数据集上的语义分割(附完整代码)

SegFormer实战指南&#xff1a;ADE20K语义分割从零精解 在计算机视觉领域&#xff0c;语义分割技术正经历着前所未有的革新。ADE20K作为场景解析的标杆数据集&#xff0c;包含了150个精细标注的语义类别&#xff0c;成为检验算法实力的试金石。本文将带您深入SegFormer这一轻量…...

智能体学习9——CrewAI-Agent与Task核心方法详解

文章目录 CrewAI Agent 与 Task 核心方法详解 一、Agent() — 定义智能体 1.1 完整参数表 1.2 核心三要素 1.3 双模型策略 1.4 常见配置模板 1.5 直接调用(不经过 Crew) 二、Task() — 定义任务 2.1 完整参数表 2.2 参数详解 2.3 context 参数(关键) 2.4 完整使用示例 三、…...