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

什么是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 通常返回以下状态码:

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

3. 幂等性

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

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

示例代码

go 复制代码
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

相关推荐
国服第二切图仔7 小时前
Electron for 鸿蒙PC实战案例Gitcode口袋工具之HTTP请求封装的技术实现与设计解析
http·electron·gitcode
百***06019 小时前
【Golang】——Gin 框架中的表单处理与数据绑定
microsoft·golang·gin
百***935010 小时前
【Golang】——Gin 框架中间件详解:从基础到实战
中间件·golang·gin
cccyi712 小时前
HTTP 协议详解:从基础到核心特性
网络协议·http·应用层
特种加菲猫14 小时前
HTTP协议核心机制解析
网络·网络协议·http
重生之我是Java开发战士16 小时前
【Java SE】HTTP与HTTPS通信协议
java·http·https
zt1985q19 小时前
外部访问 Python 搭建的 HTTP 服务器
运维·服务器·网络·windows·网络协议·http
熙客19 小时前
HTTP Client介绍
网络·网络协议·http
Arva .1 天前
HTTP vs. HTTPS 有什么区别?
http·https
西瓜树枝1 天前
前端必读:HTTP 协议核心知识全景图(三)—— 响应头详解
前端·http