一文详解REST风格

REST(Representational State Transfer,表现层状态转移)是一种被广泛采用的Web API架构风格,它并非协议或标准,而是一组设计原则,旨在通过HTTP协议天然特性构建简洁、可扩展、易于理解的API。

一、REST风格的核心概念

1.1 什么是REST?

REST由Roy Fielding在2000年的博士论文中提出,核心是**“以资源为中心”**,将一切数据(如用户、订单、商品)视为“资源”,通过HTTP方法对资源进行操作。

  • 资源(Resource):API操作的对象(如/users表示用户资源集合,/users/1表示ID为1的用户);
  • 表现层(Representation):资源的展示形式(如JSON、XML,现代API多采用JSON);
  • 状态转移(State Transfer):通过HTTP方法(GET/POST/PUT/DELETE)实现资源状态的改变,客户端无需了解服务器内部实现。

1.2 REST与HTTP的关系

REST并非独立于HTTP的技术,而是充分利用HTTP协议特性的设计风格:

  • 用HTTP方法(GET/POST/PUT/DELETE)表示操作类型;
  • 用HTTP状态码(200/201/404/500等)表示请求结果;
  • 用HTTP头(如Content-Type)表示数据格式;
  • 用URI标识资源(如/products)。

简言之:REST是“如何正确使用HTTP”的设计指南。

二、REST风格的核心原则

遵循以下原则是设计RESTful API的关键,也是区分“REST风格”与“普通API”的核心。

2.1 资源为中心,URI表示资源

  • URI应标识资源(名词),而非操作(动词);
  • 用复数表示资源集合(如/users),单数表示单个资源(如/users/1);
  • 避免在URI中包含版本号、操作动词(如/getUser/deleteOrder)。
错误URI 正确URI 说明
/getUser?id=1 /users/1 避免动词,用名词+ID表示资源
/deleteOrder/1 /orders/1 删除操作通过HTTP方法(DELETE)表示
/v1/users /users(版本放HTTP头) 避免URI包含版本号

2.2 用HTTP方法表示操作类型

HTTP方法本身具有语义,REST通过方法表示对资源的操作:

HTTP方法 操作类型 示例URI 说明
GET 查询资源 /users 查询用户列表(安全、幂等)
GET 查询资源 /users/1 查询ID为1的用户(安全、幂等)
POST 创建资源 /users 新增用户(非幂等,多次调用可能创建多个)
PUT 全量更新资源 /users/1 更新用户全部信息(幂等)
PATCH 部分更新资源 /users/1 更新用户部分信息(如仅修改姓名,幂等)
DELETE 删除资源 /users/1
### Vision Transformer (ViT) 的详细解释、原理、架构与实现 #### ViT 的核心概念 Vision Transformer 是一种基于 Transformer 架构的深度学习模型,其设计初衷是为了处理视觉任务。传统的卷积神经网络(CNNs)主导了计算机视觉领域多年,然而随着自然语言处理中 Transformer 的成功应用,研究者们尝试将其扩展到图像识别等领域。ViT 将图像分割成固定大小的小块(patches),并通过线性变换将这些小块映射为一维向量序列[^1]。 #### 图像预处理流程 在实际应用中,输入的高分辨率图像会被划分为多个不重叠的小块(flattened patches)。每个 patch 被视为独立的 token,并通过一个可训练的线性层投影至统一维度的空间。这一过程被称为 **Linear Projection of Flattened Patches**,它是 ViT 模型的关键部分之一[^3]。 #### 自注意力机制的作用 自注意力机制允许模型动态调整不同区域的重要性权重,从而捕捉全局依赖关系。相比于 CNN 中局部感受野的设计理念,Transformer 可以一次性关注整个输入序列,这使得它更适合建模复杂的长距离交互模式。具体来说,在编码器阶段,每个多头注意力模块会计算 query、key 和 value 向量之间的相似度得分,进而生成加权后的特征表示[^2]。 #### 位置嵌入的意义 由于原始 Transformer 设计用于处理顺序数据(如文本句子),因此需要引入额外的位置信息来保留 tokens 在原图中的空间布局特性。通常采用的方法是在输入 embedding 上叠加一组固定的正弦/余弦波形或者随机初始化并随时间优化得到的学习型参数作为绝对位置编码[^2]。 #### 整体架构描述 完整的 ViT 结构由以下几个组件构成: - 输入准备:把图片切分成若干个相同尺寸的patch; - Embedding 层:执行上述提到过的 flatten operation 加 linear transformation 得到初始 embeddings; - Positional Encoding 添加步骤; - 多层堆叠的标准 transformer encoder blocks —— 包含 multi-head self attention layer 和 feed forward network layers; - Classification head 输出最终预测类别概率分布。 以下是 Python 实现的一个简化版例子: ```python import torch from torch import nn, optim class PatchEmbedding(nn.Module): def __init__(self, img_size=224, patch_size=16, embed_dim=768): super().__init__() num_patches = (img_size // patch_size)**2 self.patch_embeddings = nn.Conv2d(3, embed_dim, kernel_size=patch_size, stride=patch_size) def forward(self, x): x = self.patch_embeddings(x).flatten(2).transpose(1, 2) return x class MultiHeadAttention(nn.Module): pass # Implementation omitted for brevity. class EncoderBlock(nn.Module): pass # Implementation omitted for brevity. class VisionTransformer(nn.Module): def __init__(self,...): ... model = VisionTransformer() criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) ``` 以上代码片段仅展示了如何定义基本构建单元以及搭建整体框架的大致思路,并未包含全部细节内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值