【Spring Boot】详解restful api

2023-08-10 13:23:59

目录

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 格式发送。

    示例:

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();
    }
}

更多推荐

ion-dipole forces and ion bonding ‘s differences

Ion-dipoleforcesandionbondingarebothtypesofinteractionsbetweenionsandpolarmolecules,buttheyhavedistinctdifferences:1.**NatureofInteraction**:-**Ion-DipoleForces

JavaScript 运行时比较: Node.js、 Deno 和 Bun

文章目录为什么选择正确的JavaScript运行时很重要介绍JavaScript运行时Node.jsDenoBun比较JavaScript运行时性能社区稳定性安全附加功能小结JavaScript运行时可帮助您构建高级的、服务器驱动的JavaScript项目,这些项目不依赖于用户的浏览器来运行。有几种运行时可供选择,老牌

cpp-httplib库的基本使用及文件上传下载

0.前言cpp-httplib是一个header-only的跨平台HTTP/HTTPS网络库,采用MIT开源协议,接口为阻塞调用。虽然功能简单,但也不用一堆依赖,C++的接口也比libcurl的C接口用起来顺手一点,文档也提供了不少参考代码,如果是做简单的HTTPserver或者client还是值得一试的。库里有两个重

vue基础

一、属性(1)el:挂载点<scriptsrc="https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script><body><divid="app"><p>{{message}}</p></div><script>newVue({el:'#app',data:{me

深入理解函数模板

函数模板深入理解编译器从函数模板通过具体类型产生不同的函数编译器会队函数模板进行两次编译对模板代码本身进行编译对参数替换后的代码进行编译注意事项函数模板本身不允许隐式类型转换自动类型推导时,必须严格匹配显示类型指定时,能够进行隐式类型转换函数模板可以定义任意多个不同的类型参数对于多参数函数模板无法自动推导返回值类型可以

蓝绿发布 灰度发布 区别

蓝绿发布灰度发布区别蓝绿发布(Blue-greendeployment)和灰度发布(Canaryrelease)是两种常用的软件发布策略,用于逐步引入新版本或功能。尽管它们的目标相似,但在具体实施和效果上存在一些区别。下面是蓝绿发布和灰度发布的主要区别:并行环境:蓝绿发布使用并行环境来同时部署新旧版本的应用程序,其中蓝

一个Flutter&Cocoapods项目打包问题集锦

一个Flutter&Cocoapods项目打包问题集锦问题1github加速问题cocoapods项目需要访问https://github.com/CocoaPods/Specs.git,众所周知,github经常被墙,导致经常需要借助加速来下载和访问,这里可以使用油猴脚本或者Fastgithub浏览器插件来解决。我的

Scikit-Learn快速生成分类数据集

假如你学习了新的分类算法并想进一步探索研究、尝试不同的超参数评估模型性能,但问题是你找不到好的数据集用于实验。幸运的是Scikit-Learn提供的make_classification()方法可以创建不同类型的数据集,它可以生成不同类型的数据集:二分类、多分类、平衡或不平衡数据集、难以分类的数据集等。本文通过示例详细

【C# 基础精讲】Task和Task<T>的应用

当涉及异步编程时,Task和Task<T>是C#中的重要概念。它们不仅是处理异步操作的关键类型,还提供了一些强大的功能和方法,使异步编程更加高效和灵活。在本文中,我们将深入探讨Task和Task<T>的应用,从创建、执行、等待到取消和异常处理等方面进行详细讨论,帮助您更好地理解如何在C#中应用这些类型。1.Task和T

npm、yarn、pnpm如何清除缓存?

前端工程化创建项目会经常使用各种安装包管理工具,安装各种前端依赖包。例如,npm、yarn、pnpm等。时间一长,各种安装包管理工具的在安装依赖时,留下的缓存文件就会变得很大,以至于影响系统的运行,因此必要时清除缓存就是一个不错的选择。本文将着重介绍npm、yarn、pnpm清除缓存的方法。一、Npm1、查看缓存路径要

LLaMA参数微调方法

1.AdapterTuning:嵌入在transformer中新增了一个名为adapter的结构,其核心思想是保持模型其他原始参数不变,只改变adapter的参数,其结构如下图所示:1.在每一个transformer模块最后都加入一层adapter。2.adapter首先使用一个feedforward将高维特征映射到了

热文推荐