详解接口的常见请求方式
详解接口的常见请求方式
- 一、 常见接口请求方式
- 1. GET
- 2. POST
- 3. PUT
- 4. DELETE
- 5. PATCH
- 6. HEAD
- 7. OPTIONS
- 二、 实现方法
- 1. 前端实现
- 2. 后端实现
- 三、 作用与主要区别
- 四、 举例讲解
- 1. 创建 Spring Boot 工程
- 2. 添加依赖
- 3. 编写 Controller 实现接口
- 关键点说明
- 4. 启动与测试
- 5. 总结
- 总结
在 Web 开发中,接口请求方式(也称 HTTP 方法)是客户端与服务器交互的重要手段,不同的方法代表了不同的操作意图。
一、 常见接口请求方式
1. GET
- 作用:用于获取资源或数据,不对服务器数据进行修改。
- 实现方法:前端通过 AJAX、Fetch API、Axios 等发起 GET 请求,参数一般拼接在 URL 后面。
- 特点及区别:
- 参数在 URL 中传递,数据量有限且不适合传输敏感信息。
- 是一种幂等操作,重复请求返回相同数据。
2. POST
- 作用:用于向服务器提交数据或创建新资源。
- 实现方法:通过 Fetch API、Axios 等发送 POST 请求,将数据放在请求体中传输。
- 特点及区别:
- 可以传输大量数据,且数据在请求体内相对安全。
- 非幂等操作,重复请求可能导致数据重复创建。
3. PUT
- 作用:用于更新或替换整个资源。
- 实现方法:客户端发送 PUT 请求时,需提供完整的资源数据,后端接收到请求后对资源进行完整替换。
- 特点及区别:
- 操作幂等:多次请求的结果与一次请求相同。
- 适用于需要全量更新的场景。
4. DELETE
- 作用:用于删除服务器上的资源。
- 实现方法:前端发起 DELETE 请求,通过 URL 指定需要删除的资源标识。
- 特点及区别:
- 同样为幂等操作,删除不存在的资源通常返回成功状态或特定错误提示。
- 应谨慎使用,确保用户操作的安全性。
5. PATCH
- 作用:用于对资源进行部分更新。
- 实现方法:发送 PATCH 请求时,只传递需要修改的字段或部分数据。
- 特点及区别:
- 与 PUT 相比,PATCH 不要求提供完整的资源数据,适用于局部修改。
- 操作可能不完全幂等,需根据具体实现确认。
6. HEAD
- 作用:与 GET 类似,但只返回响应头信息,不返回响应体。
- 实现方法:发送 HEAD 请求,通常用于检查资源是否存在或获取资源元数据。
- 特点及区别:
- 数据传输量较小,适合用于检测资源更新或缓存验证。
- 不返回具体数据内容。
7. OPTIONS
- 作用:用于获取服务器支持的 HTTP 请求方法列表,常用于跨域请求的预检(CORS)。
- 实现方法:浏览器在实际跨域请求前自动发起 OPTIONS 请求,服务器返回允许的方法列表。
- 特点及区别:
- 主要用于安全策略确认,不涉及具体业务数据。
- 帮助客户端决定是否可以安全地发起实际请求。
二、 实现方法
1. 前端实现
-
使用原生 API:
例如使用 JavaScript 的 Fetch API:// GET 请求示例 fetch('https://api.example.com/data', {method: 'GET' }).then(response => response.json()).then(data => console.log(data));// POST 请求示例 fetch('https://api.example.com/data', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ key: 'value' }) }).then(response => response.json()).then(data => console.log(data)); -
使用第三方库:
如 Axios 或 jQuery.ajax,可以进一步封装请求逻辑:// Axios GET 请求 axios.get('https://api.example.com/data').then(response => console.log(response.data));// Axios POST 请求 axios.post('https://api.example.com/data', { key: 'value' }).then(response => console.log(response.data));
2. 后端实现
- 服务器框架支持:
大多数后端框架(如 Express、Spring Boot、Django 等)都提供对不同 HTTP 方法的路由支持。例如在 Express 中:// Express 路由示例 const express = require('express'); const app = express();app.get('/data', (req, res) => {// 处理 GET 请求,返回数据res.json({ message: 'GET 请求成功' }); });app.post('/data', (req, res) => {// 处理 POST 请求,创建资源res.json({ message: 'POST 请求成功' }); });app.put('/data/:id', (req, res) => {// 处理 PUT 请求,替换资源res.json({ message: 'PUT 请求成功' }); });app.delete('/data/:id', (req, res) => {// 处理 DELETE 请求,删除资源res.json({ message: 'DELETE 请求成功' }); });app.patch('/data/:id', (req, res) => {// 处理 PATCH 请求,部分更新资源res.json({ message: 'PATCH 请求成功' }); });
三、 作用与主要区别
-
数据操作目的:
- GET 用于读取数据,POST 用于创建数据,PUT 用于全量更新数据,PATCH 用于局部更新数据,而 DELETE 用于删除数据。
-
参数传递位置:
- GET 的参数通常在 URL 中传递,而 POST、PUT、PATCH 则将数据放在请求体中。
-
幂等性:
- GET、PUT、DELETE、HEAD、OPTIONS 通常是幂等的,即相同请求多次执行结果相同。
- POST 和 PATCH 则可能不是幂等的,重复提交可能导致资源多次创建或部分更新结果不确定。
-
安全性考虑:
- GET 请求由于数据暴露在 URL 中,不适合传递敏感数据。
- POST、PUT、PATCH 请求通过请求体传输数据,相对安全但仍需通过 HTTPS 等方式保证数据传输安全。
四、 举例讲解
1. 创建 Spring Boot 工程
-
使用 Spring Initializr
可以通过 Spring Initializr 快速生成项目:- 选择 Maven 或 Gradle 项目
- 语言选择 Java
- Spring Boot 版本选择当前稳定版本
- 添加依赖:
Spring Web(spring-boot-starter-web) - 生成项目后下载并导入到 IDE 中
-
项目结构
工程生成后基本结构如下:├── src │ ├── main │ │ ├── java │ │ │ └── com.example.demo │ │ │ └── DemoApplication.java │ │ └── resources │ │ └── application.properties └── pom.xml
2. 添加依赖
在 pom.xml 中确保已经包含了以下依赖(若使用 Gradle 则为相应依赖):
<dependencies><!-- Spring Boot Web 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 其他依赖,如需要可添加 -->
</dependencies>
3. 编写 Controller 实现接口
在 Spring Boot 中,通过编写 @RestController 类来处理 HTTP 请求。下面是一个示例 Controller,展示了如何实现 GET、POST、PUT、DELETE 和 PATCH 请求。
package com.example.demo.controller;import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api")
public class DemoController {// GET 请求:获取资源@GetMapping("/data")public String getData() {return "GET 请求成功";}// POST 请求:创建新资源@PostMapping("/data")public String createData(@RequestBody String requestData) {// 模拟处理请求体中的数据 requestDatareturn "POST 请求成功,接收到数据:" + requestData;}// PUT 请求:全量更新资源@PutMapping("/data/{id}")public String updateData(@PathVariable("id") Long id, @RequestBody String newData) {// 根据 id 查找资源并进行全量更新return "PUT 请求成功,更新 ID:" + id + " 的数据为:" + newData;}// DELETE 请求:删除资源@DeleteMapping("/data/{id}")public String deleteData(@PathVariable("id") Long id) {// 根据 id 删除资源return "DELETE 请求成功,删除 ID:" + id + " 的数据";}// PATCH 请求:部分更新资源@PatchMapping("/data/{id}")public String patchData(@PathVariable("id") Long id, @RequestBody String partialData) {// 根据 id 更新部分数据return "PATCH 请求成功,部分更新 ID:" + id + " 的数据:" + partialData;}
}
关键点说明
-
注解说明:
@RestController:标识该类为控制器,并自动将方法返回的对象序列化为 JSON 格式响应。@RequestMapping("/api"):为控制器设置统一的请求前缀。@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping分别对应 HTTP 请求方法,简化了@RequestMapping(method = RequestMethod.XXX)的写法。
-
参数获取:
@PathVariable:用于获取 URL 中的动态参数(如/data/{id}中的 id)。@RequestBody:用于获取请求体中的数据,常用于 POST、PUT、PATCH 请求。
-
返回值:
直接返回字符串,实际应用中可以返回 Java 对象,由 Spring Boot 自动转换为 JSON 格式。
4. 启动与测试
-
启动应用
运行DemoApplication.java中的main方法,启动 Spring Boot 应用。 -
测试接口
可以使用 Postman、curl 或浏览器进行接口测试。例如:- GET 请求:访问
http://localhost:8080/api/data - POST 请求:向
http://localhost:8080/api/data发送带有 JSON 数据的请求体 - PUT/DELETE/PATCH 请求:访问
http://localhost:8080/api/data/1(其中1为示例资源 ID)
- GET 请求:访问
5. 总结
通过以上步骤,我们完成了使用 Spring Boot 实现常见 HTTP 请求方式的接口:
- 项目初始化与依赖添加:确保项目中包含
spring-boot-starter-web依赖。 - Controller 实现:使用不同的映射注解(如
@GetMapping、@PostMapping等)来处理不同请求类型,并通过@RequestBody和@PathVariable处理参数。 - 启动与测试:启动应用后,通过工具测试各个接口是否符合预期。
这种实现方式不仅遵循 RESTful 风格,也使得前后端交互更为清晰和易于维护。
总结
接口请求方式是前后端数据交互的基础,不同的 HTTP 方法对应着不同的操作语义和数据处理方式。合理选择请求方式有助于:
- 遵循 RESTful API 设计原则,
- 保持数据操作的明确性,
- 确保系统的安全性与稳定性。
理解和正确使用这些请求方式,不仅能够提高系统的扩展性,还能在开发、维护以及调试过程中带来极大的便利。
相关文章:
详解接口的常见请求方式
详解接口的常见请求方式 一、 常见接口请求方式1. GET2. POST3. PUT4. DELETE5. PATCH6. HEAD7. OPTIONS 二、 实现方法1. 前端实现2. 后端实现 三、 作用与主要区别四、 举例讲解1. 创建 Spring Boot 工程2. 添加依赖3. 编写 Controller 实现接口关键点说明 4. 启动与测试5. 总…...
HarmonyOS-ArkUI Grip组件
我们在学习List的时候,已经捎带引入了Grid。讲解如下图所示: 也就是,如果一个表,长宽基本都是一致的,那么此时可以完全不用Grid也可以实现,并且,优先考虑的就是List。 如果List实现不了的情况下…...
2025清华大学:DeepSeek教程全集(PDF+视频精讲,共10份).zip
一、资料列表 第一课:Deepseek基础入门 第二课:DeepSeek赋能职场 第三课:普通人如何抓住DeepSeek红利 第四课:让科研像聊天一样简单 第五课:DeepSeek与AI幻觉 第六课:基于DeepSeek的AI音乐词曲的创造法 第…...
jupyter使用过程中遇到的问题
1、No module named ‘notebook.extensions’ 报错内容为: No module named notebook.extensions解决办法 出现这个错误代表你尝试给 Jupyter notebook 安装自动补全的插件,但是 notebook 没安装成功; 解决办法:不用 pip 安装 n…...
mac vim命令快捷键
目录 移动光标插入模式复制/粘贴删除搜索/替换退出 移动光标 快捷键说明0 / ^跳到行首,移动到光标所在行的"行首"$跳到行末,移动到光标所在行的"行尾"gg跳到文件第一行G移动到文章的最后[n]G跳到第n行w光标跳到下个字的开头e光标跳…...
【Golang】defer与recover的组合使用
在Go语言中,defer和recover是两个关键特性,通常结合使用以处理资源管理和异常恢复。以下是它们的核心应用场景及使用示例: 1. defer 的应用场景 defer用于延迟执行函数调用,确保在函数退出前执行特定操作。主要用途包括ÿ…...
低代码配置式Web组态解析
低代码配置式Web组态技术通过可视化操作和预置组件库,大幅降低开发门槛,适用于工业控制、物联网监控、数据可视化等场景。以下是综合行业实践和产品特性的分析: 一、核心功能与优势 可视化编辑与拖拽布局 提供图形化编辑器࿰…...
KiLog2MaximumIncrement的由来和KiMaximumIncrementReciprocal的由来
第一部分:KiLog2MaximumIncrement的由来 i 1; j KeMaximumIncrement; while ((1UI64<<i) < KeMaximumIncrement) { i; } KiLog2MaximumIncrement i; 2^17131072 2^18262144 i18KiLog2MaximumIncrement 中…...
基于web的家政服务网站
内容摘要 由于互联网的使用,人们在管理、应用、服务等领域使用数据更加简洁、方便,大大提高了工作效率。互联网正逐渐融入我们的生活,影响和改变我们的生活。 家政服务管理系统是典型的信息管理系统(MIS)。其开发主要…...
mac命令行快捷键
光标移动 Ctrl A: 将光标移动到行首。Ctrl E: 将光标移动到行尾。Option 左箭头: 向左移动一个单词。Option 右箭头: 向右移动一个单词。 删除和修改 Ctrl K: 删除从光标到行尾的所有内容。Ctrl U: 删除从光标到行首的所有内容。Ctrl W: 删除光标前的一个单词。Ctrl …...
聚水潭数据集成到MySQL的最佳实践分享
聚水潭数据集成到MySQL的技术案例分享 在本次技术案例中,我们将探讨如何通过轻易云数据集成平台,将聚水潭的数据高效、可靠地集成到MySQL数据库中。具体的集成方案为“聚水潭-商品信息查询-->BI初本-商品信息表_copy”。该方案旨在实现从聚水潭获取商…...
线性代数核心概念与NumPy科学计算实战全解析
前言 学习方法: 思维导图,梳理 多记忆,函数名和功能,参数 学会应用,不要钻牛角尖 一、浅解线性代数 1.1标量 标量是一个只有大小没有方向的量。在数学上,标量通常表示为一个普通的数字,如质量…...
Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案
Spring Boot中接口数据字段为 Long 类型时,前端number精度丢失问题解决方案 在Spring Boot中,当接口数据字段为 Long 类型时,返回页面的JSON中该字段通常会被序列化为数字类型。 例如,一个Java对象中有一个 Long 类型的属性 id …...
C#自定义曲线便器功能实现(简化版)
目录 一、曲线编辑器实现功能 二、实现方法说明 三、关键代码说明 1、绘制背景板和曲线 2、绘制坐标系面板 3、绘制曲线 四、工程下载连接 一、曲线编辑器实现功能 添加或者删除控制点,通过移动控制点来修改曲线形状 二、实现方法说明 1、坐标系系统&#x…...
Unity Shader编程】之复杂光照
在Unity Shader的LightMode标签中,除了前向渲染和延迟渲染外,还支持多种渲染模式设置。以下是主要分类及用途: 一、核心渲染路径模式 前向渲染相关 ForwardBase 用于基础光照计算,处理环境光、主平行光、逐顶点/SH光源及光照贴图。…...
解锁U盘属性0字节困境,重获数据生机
在数字化浪潮中,U盘宛如一位忠诚的“数据信使”,频繁穿梭于各种设备之间,为我们存储和传输着重要信息。然而,当U盘突然显示属性为0字节时,就如同这位信使突然“失声”,让我们陷入了数据丢失的恐慌之中。U盘…...
⭐算法OJ⭐二叉树的直径【树】(C++实现)Binary Tree Paths
543. Binary Tree Paths(二叉树的直径) Given the root of a binary tree, return the length of the diameter of the tree. The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or m…...
docker使用命令笔记
docker使用命令笔记 1. 安装docker2. 拉取镜像3. 镜像与容器4. 基于镜像创建容器4. 操作创建好的容器5. docker文件传输6. ubuntu的docker的一些基本环境搭建 记录docker的一些使用命令 1. 安装docker 遵循官方安装说明即可,windows需要下载docker desktop后在doc…...
字典树与01trie
字典树简介 当我们通过字典查一个字或单词的时候,我们会通过前缀或关键字的来快速定位一个字的位置,进行快速查找。 字典树就是类似字典中索引表的一种数据结构,能够帮助我们快速定位一个字符串的位置。 字典树是一种存储字符串的数据结构…...
vue - [Vue warn]: Duplicate keys detected: ‘0‘. This may cause an update error.
问题描述: vue项目中,对表单数组赋值时,控制台抛出警告: 问题代码: 问题分析: 1、Vue 要求每个虚拟 DOM 节点必须有唯一的 key。该警告信息通常出现在使用v-for循环的场景中,多个同级节点使用…...
mysql中show命令的使用
在 MySQL 中,SHOW 命令是一个非常实用的工具,用于查询数据库元数据(如数据库、表、列、索引等信息)。以下是常见的 SHOW 命令及其用法: 1. 显示所有数据库 SHOW DATABASES;列出服务器上的所有数据库。 2. 显示当前数据…...
各类神经网络学习:(三)RNN 循环神经网络(中集),同步多对多结构的详细解释
上一篇下一篇RNN(上集)RNN(下集) 同步多对多结构 1)结构详解 ①图解: ②参数含义: x t x_t xt :表示每一个时刻的输入; o t o_t ot :表示每一个时刻的输…...
Python Web 框架 Django、Flask 和 FastAPI 对比
在探索 Python Web 框架时,Django、Flask 和 FastAPI 无疑是最常被提及的名字。根据我们最新的 Python 开发者调查,这三大框架继续稳坐后端 Web 开发的热门宝座。它们均为开源项目,并且与 Python 的最新版本无缝兼容。然而,面对不…...
Hyperlane 似乎是一个轻量级、高性能的 Rust HTTP 服务器库
关键要点 Hyperlane 是一个轻量级、高性能的 Rust HTTP 服务器库,适合简化网络服务开发。它支持 HTTP 请求解析、响应构建、TCP 通信,并提供中间件、WebSocket 和服务器发送事件(SSE)功能。安装通过 cargo add hyperlane 完成&am…...
【计算机网络运输层详解】
文章目录 一、前言二、运输层的功能1. 端到端通信2. 复用与分用3. 差错检测4. 流量控制5. 拥塞控制 三、运输层协议:TCP 和 UDP1. TCP:面向连接的可靠传输协议2. UDP:无连接的传输协议 四、端口号与进程通信1. 端口号分类2. 端口通信模型 五、…...
UR5e机器人位姿
UR5e 作为一款 6 自由度协作机器人,其末端执行器的位姿(位置与姿态的组合)控制是实现精准操作的核心。在笛卡尔坐标系中,位姿通常用齐次变换矩阵表示,包含末端的三维位置(x, y, z)和三维姿态&am…...
导入 Excel 规则批量修改或删除 PDF 文档内容
需要对 PDF 文档内容进行修改的时候,通常我们会需要借助一些专业的工具来帮我们完成。那我们如果需要修改的 PDF 文档较多的时候,有什么方法可以帮我们实现批量操作呢?今天这篇文章就给大家介绍一下当我们需要批量修改多个 PDF 文档的时候&am…...
大模型tokenizer重构流程
大模型tokenizer层再训练(选取Qwen7B试验,重构token层) 最近公司可能想训练一个蛋白质大模型,需要了解一下大模型tokenizer重构,之后可能要训练,这里做了一定的总结。 文章目录 1. 首先查看Qwen2.5 7B基本…...
JAVA线程安全的集合类分类
1. 传统同步集合类(早期实现,性能较低) Vector 动态数组实现,所有方法通过 synchronized 同步锁保证线程安全。 Stack 继承自 Vector,实现后进先出(LIFO)堆栈,同步锁机…...
ISIS-1 ISIS概述
前面几章我们介绍了OSPF的基础工作原理以及怎样交互LSA形成LSDB链路状态数据库的 这一章我们来介绍另一个链路状态路由协议,ISIS路由协议 一、概述 ISIS(Intermediate System to Intermediate System,中间系统到中间系统)是由ISO(International Organization for Standardiza…...
