【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": "[email protected]"})
}

https://github.com/0voice

相关推荐
爱吃烤鸡翅的酸菜鱼6 小时前
【SpringMVC】详解cookie,session及实战
java·http·java-ee·intellij-idea
熙曦Sakura7 小时前
【Linux网络】HTTP
linux·网络·http
曼岛_9 小时前
[Java实战]Spring Boot 快速配置 HTTPS 并实现 HTTP 自动跳转(八)
java·spring boot·http
xsh21914 小时前
HTTP 和 WebSocket 的区别
websocket·网络协议·http
爱吃烤鸡翅的酸菜鱼16 小时前
Java【网络原理】(5)深入浅出HTTPS:状态码与SSL/TLS加密全解析
java·网络·后端·网络协议·http·https·ssl
zz07232018 小时前
第二十一周:项目开发中遇到的相关问题(二)
java·spring·restful
z人间防沉迷k1 天前
HTTP/2概览及内核解析
网络·网络协议·http·https
是代码侠呀1 天前
HTTP 的发展史:从前端视角看网络协议的演进
前端·网络协议·http·开源·github·github star·github 加星
贺函不是涵1 天前
【沉浸式求职学习day35】【Tomcat安装、配置】【Http简述】
学习·http·tomcat
麓殇⊙2 天前
Servlet--快速入门及HTTP概述
网络协议·http·servlet