【gin】http方法了解,以及RESTful API与版本控制

news2025/1/15 13:56:23

什么是RESTful API?

RESTful API 是一种基于 REST 架构风格 的接口设计方法,常用于前后端通信。REST 的全称是 Representational State Transfer(表现层状态转移),它基于 HTTP 协议,遵循以下原则:

1. 资源的表现层

  • 每个资源使用唯一的 URL 表示。例如:
  • 获取用户信息:GET /users/123
  • 获取文章列表:GET /articles
  • 资源使用 HTTP 方法来操作
  • GET:读取资源
  • POST:创建资源
  • PUT:更新资源
  • DELETE:删除资源

2. 无状态性

  • 每个请求都独立,不依赖上下文。例如,客户端每次请求必须携带身份验证信息。

3. 结构化数据

  • 数据格式通常为 JSON 或 XML,但 JSON 是最流行的选择。

HTTP 方法讲解

HTTP 方法是 RESTful API 的核心,常见的四种方法分别是 GETPOSTPUTDELETE,它们对应的是操作资源的不同动作。

1. GET:读取资源

  • 作用:获取资源的内容或状态。
  • 特点
  • 安全性:不会修改服务器数据。
  • 幂等性:多次请求返回结果相同。
  • 例子
  • 获取用户详情:GET /users/123
  • 获取文章列表:GET /articles
  • 表格演示
请求 URL描述响应数据
GET /users/1获取 ID 为 1 的用户{ "id": 1, "name": "Alice", "email": "..." }

2. POST:创建资源

  • 作用:在服务器上新建一个资源。
  • 特点
  • 非幂等性:同一请求可能创建多个相同的资源。
  • 例子
  • 创建用户:POST /users
  • 创建订单:POST /orders
  • 表格演示
请求 URL请求体(JSON)响应数据
POST /users{ "name": "Alice", "email": "..." }{ "id": 1, "name": "Alice", "email": "..." }

3. PUT:更新资源

  • 作用:更新资源的全部内容。
  • 特点
  • 幂等性:多次请求结果一致。
  • 例子
  • 更新用户信息:PUT /users/123
  • 表格演示
请求 URL请求体(JSON)响应数据
PUT /users/1{ "name": "Bob", "email": "..." }{ "id": 1, "name": "Bob", "email": "..." }

4. DELETE:删除资源

  • 作用:删除服务器上的资源。
  • 特点
  • 幂等性:重复删除操作返回结果一致(资源不存在)。
  • 例子
  • 删除用户:DELETE /users/123
  • 表格演示
请求 URL描述响应数据
DELETE /users/1删除 ID 为 1 的用户{ "message": "User deleted" }

总结表格:HTTP 方法对比

方法作用是否幂等请求体示例 URL
GET读取资源GET /users/123
POST创建资源包含新建数据POST /users
PUT更新资源包含资源完整信息PUT /users/123
DELETE删除资源DELETE /users/123

类比解释

  1. GET 是在图书馆借书:你获取了书(资源)的副本,书本身不会被修改。
  2. POST 是买新书放进书架:你创建了一本新书,并把它放到指定位置。
  3. PUT 是用新书换旧书:你替换了一本书的内容,但书的位置没有变。
  4. DELETE 是扔掉书:你将书从书架中移除。

API 版本控制

API 版本控制是保证接口稳定性和向后兼容的重要策略。当接口发生变更时,使用版本号区分不同接口,避免影响已有用户。

常用的版本控制方式

方式描述示例
URL 版本控制在 URL 中添加版本号(最常见方式)GET /v1/users/123
请求头版本控制在请求头中加入版本信息Header: X-API-Version: 1
查询参数控制在查询参数中添加版本号GET /users/123?version=1
域名控制通过不同的子域名区分版本(较少使用)https://v1.api.example.com

网络相关知识补充

1. HTTP 与 HTTPS

  • HTTP 是 RESTful API 传输数据的基础协议。
  • HTTPS 是 HTTP 的安全版本,增加了数据加密(SSL/TLS),确保通信的安全性。

2. 状态码

RESTful API 通常返回以下状态码:

状态码含义说明
200OK请求成功,返回数据
201Created创建资源成功
400Bad Request请求参数错误
401Unauthorized身份验证失败
404Not Found资源未找到
500Internal Server Error服务器内部错误

3. 幂等性

  • 幂等性是指多次相同的请求,结果不变:
  • GETPUTDELETE 应是幂等的。
  • POST 通常不是幂等的。

简单用 Gin 实现 RESTful API 和版本控制

示例代码

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	// v1版本组
	v1 := r.Group("/v1")
	{
		v1.GET("/users/:id", getUserV1)
	}

	// v2版本组
	v2 := r.Group("/v2")
	{
		v2.GET("/users/:id", getUserV2)
	}

	r.Run(":8080")
}

func getUserV1(c *gin.Context) {
	id := c.Param("id")
	c.JSON(200, gin.H{"version": "v1", "id": id, "name": "User V1"})
}

func getUserV2(c *gin.Context) {
	id := c.Param("id")
	c.JSON(200, gin.H{"version": "v2", "id": id, "name": "User V2", "email": "user@example.com"})
}

https://github.com/0voice

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2277035.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WPF系列十二:图形控件CombinedGeometry

简介 CombinedGeometry 是 WPF (Windows Presentation Foundation) 中的一个几何对象,用于将两个几何图形组合成一个新的几何图形。它允许你通过不同的组合模式(如相交、并集、差集或异或)来创建复杂的形状。常与 Path 控件一起使用来绘制组…

《计算机网络》课后探研题书面报告_网际校验和算法

网际校验和算法 摘 要 本文旨在研究和实现网际校验和(Internet Checksum)算法。通过阅读《RFC 1071》文档理解该算法的工作原理,并使用编程语言实现网际校验和的计算过程。本项目将对不同类型的网络报文(包括ICMP、TCP、UDP等&a…

业务幂等性技术架构体系之接口幂等深入剖析

在实际应用中,由于网络不稳定、系统延迟等原因,客户端可能会重复发送相同的请求。如果这些重复请求都被服务器处理并执行,就可能导致意想不到的问题,比如重复扣款、多次下单或者数据不一致等。 这就是为什么我们需要接口幂等性。…

sql模糊关联匹配

需求目标: 建立临时表 drop table grafana_bi.zbj_gift_2024;USE grafana_bi; CREATE TABLE zbj_gift_2024 (id INT AUTO_INCREMENT PRIMARY KEY,userName VARCHAR(255),giftName VARCHAR(255),giftNum INT,points INT,teacher VARCHAR(255),sendDate DATETIME,…

《蜜蜂路线》

题目背景 无 题目描述 一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你&#xff1a;蜜蜂从蜂房 mm 开始爬到蜂房 nn&#xff0c;m<nm<n&#xff0c;有多少种爬行路线&#xff1f;&#xff08;备注&#xff1a;题面有误&am…

LeetCode100之搜索二维矩阵(46)--Java

1.问题描述 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回…

JS爬虫实战演练

在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…

自动连接校园网wifi脚本实践(自动网页认证)

目录 起因执行步骤分析校园网登录逻辑如何判断当前是否处于未登录状态&#xff1f; 书写代码打包设置开机自动启动 起因 我们一般通过远程控制的方式访问实验室电脑&#xff0c;但是最近实验室老是断电&#xff0c;但重启后也不会自动连接校园网账户认证&#xff0c;远程工具&…

WPS计算机二级•表格函数计算

听说这里是目录哦 函数基础知识 相对绝对混合引用&#x1f32a;️相对引用绝对引用混合引用 常用求和函数 SUM函数&#x1f326;️语法说明 函数快速求 平均数最值⚡平均数最值 实用统计函数 实现高效统计&#x1f300;COUNTCOUNTIF 实用文本函数 高效整理数据&#x1f308;RIG…

自动化测试工具Ranorex Studio(八十九)-解决方案浏览器

解决方案浏览器 除了为项目添加条目外&#xff0c;’Solution Explorer’允许你编辑解决方案的其他辅助选项。 例如&#xff0c;增加文件夹从而将项目中的录制模块和代码模块分离开来。 图&#xff1a;在solution browser中为项目添加文件夹 另外&#xff0c;你可以删除不用的…

2025 年 UI 大屏设计新风向

在科技日新月异的 2025 年&#xff0c;UI 大屏设计领域正经历着深刻的变革。随着技术的不断进步和用户需求的日益多样化&#xff0c;新的设计风向逐渐显现。了解并掌握这些趋势&#xff0c;对于设计师打造出更具吸引力和实用性的 UI 大屏作品至关重要。 一、沉浸式体验设计 如…

绘制三角形、正六边形、五角星、六角星

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>绘制图形</title><style>body {displ…

LLM实现视频切片合成 前沿知识调研

1.相关产品 产品链接腾讯智影https://zenvideo.qq.com/可灵https://klingai.kuaishou.com/即梦https://jimeng.jianying.com/ai-tool/home/Runwayhttps://aitools.dedao.cn/ai/runwayml-com/Descripthttps://www.descript.com/?utm_sourceai-bot.cn/Opus Cliphttps://www.opu…

Node.js - HTTP

1. HTTP请求 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超文本传输协议&#xff09;是客户端和服务器之间通信的基础协议。HTTP 请求是由客户端&#xff08;通常是浏览器、手机应用或其他网络工具&#xff09;发送给服务器的消息&#xff0c;用来请求资源或执行…

鸿蒙中自定义slider实现字体大小变化

ui&#xff1a; import { display, mediaquery, router } from kit.ArkUI import CommonConstants from ./CommonConstants; import PreferencesUtil from ./PreferencesUtil; import StyleConstants from ./StyleConstants;// 字体大小 Entry Component struct FontSize {Sta…

Springboot + vue 小区物业管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…

uni-app编写微信小程序使用uni-popup搭配uni-popup-dialog组件在ios自动弹出键盘。

uni-popup-dialog 对话框 将 uni-popup 的type属性改为 dialog&#xff0c;并引入对应组件即可使用对话框 &#xff0c;该组件不支持单独使用 示例 <button click"open">打开弹窗</button> <uni-popup ref"popup" type"dialog"…

RabbitMQ中有哪几种交换机类型?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ中有哪几种交换机类型&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ中有哪几种交换机类型&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中&#xff0c;交换机&#xf…

Uniapp中实现加载更多、下拉刷新、返回顶部功能

一、加载更多&#xff1a; 在到达底部时&#xff0c;将新请求过来的数据追加到原来的数组即可&#xff1a; import {onReachBottom } from "dcloudio/uni-app";const pets ref([]); // 显示数据function network() {uni.request({url: "https://api.thecatap…

Kotlin 循环语句详解

文章目录 循环类别for-in 循环区间整数区间示例1&#xff1a;正向遍历示例2&#xff1a;反向遍历 示例1&#xff1a;遍历数组示例2&#xff1a;遍历区间示例3&#xff1a;遍历字符串示例4&#xff1a;带索引遍历 while 循环示例&#xff1a;计算阶乘 do-while 循环示例&#xf…