重生之我要学后端0--HTTP协议和RESTful APIs
http和RESTful APIs
- HTTP协议
- RESTful APIs设计
- RESTful API设计实例
HTTP协议
HTTP(超文本传输协议)是用于分布式、协作式和超媒体信息系统的应用层协议。它是网页数据通讯的基础。工作原理简述如下:
- 客户端请求(Request):当你在浏览器中输入一个URL或点击一个链接时,浏览器会向服务器发送一个HTTP请求。这个请求包括:
- 请求行:包含方法(如GET, POST, PUT, DELETE等)、请求资源的URI和HTTP版本。
- 请求头部:包含表示浏览器类型、接受的内容类型、连接方式等的元数据。
- 空行:指示头部结束。
- 可选的请求正文:对于POST或PUT请求,正文中包含要发送给服务器的数据。


这确实是一个HTTP请求的请求行和请求头,它看起来是一个WebSocket握手请求。
WebSocket是一种在单个TCP连接上进行全双工通讯的协议。这个特定的请求正在试图从标准的HTTP协议升级到WebSocket协议。这里是请求的一些关键组成部分解释:GET ws://localhost:5173/ros HTTP/1.1:这个请求行指出客户端希望发起的是一个GET请求,
使用的是HTTP/1.1协议。
而ws://localhost:5173/ros表示客户端尝试通过WebSocket协议与服务器建立连接,
并且目标资源是/ros。Host: localhost:5173:Host头部告诉服务器客户端想要连接的主机名和端口号。Connection: Upgrade:这表明客户端希望升级连接的协议。Upgrade: websocket:这告知服务器客户端想要升级到WebSocket协议。Sec-WebSocket-Version: 13:表示客户端支持的WebSocket版本。Sec-WebSocket-Key: 是经过Base64编码的随机值,
服务器会用这个值来构造一个响应头Sec-WebSocket-Accept,以完成握手。Sec-WebSocket-Extensions: 表示客户端支持的WebSocket扩展。由于WebSocket协议的握手是基于HTTP协议进行的,所以初始的握手请求遵循HTTP请求格式,
但是之后的数据传输则不再遵循HTTP协议,而是采用WebSocket自己定义的帧格式进行数据交换。该请求没有请求正文(Body)部分,因为WebSocket握手请求通常不需要正文;
握手的所有必要信息都包含在请求头中。如果服务器接受握手,则会返回一个状态码101的响应,
表示协议切换,然后客户端和服务器之间就可以开始WebSocket协议的数据交换了。

标头是请求头和响应头,载荷是请求体(如果是get请求不显示),响应是响应体。
- 服务器响应(Response):服务器接收并处理客户端的请求后,返回一个HTTP响应。这个响应包括:
- 状态行:包含所使用的HTTP版本、状态码(如200 OK, 404 Not Found等)和状态消息。
- 响应头部:包含服务器类型、内容类型、编码、缓存控制等信息。
- 空行:指示头部结束。
- 可选的响应正文:包含请求的资源内容,例如HTML页面、图像等。


- 连接管理:按照HTTP/1.1协议,默认情况下,一次TCP连接可以发送多个HTTP请求(持久连接),提高了效率。而HTTP/2进一步优化了这些概念,支持同时多个请求/响应(多路复用)。
RESTful APIs设计
REST(表现层状态转移)是一种软件架构风格,它提倡网络应用程序的客户端和服务器之间的交互应该是无状态的,且可以通过标准的HTTP方法进行。遵循REST原则设计的Web服务称为RESTful API。核心原则包括:
- 无状态(Statelessness):每个请求都包含了执行该请求所需的所有信息。服务器不需要保存客户端的状态。
- 客户端-服务器(Client-Server):客户端和服务器之间的关注点分离,使得两者可以独立地发展和扩展。
- 可缓存(Cacheable):服务器响应必须定义自己是否可以被缓存。
- 统一接口(Uniform Interface):保证了系统解耦和简单性。
- 分层系统(Layered System):通过层来构建分布式系统,每一层只知道与其直接相连的层。
- 按需代码(Code on Demand,可选):可以通过向客户端发送可执行代码来扩展客户端功能(比如JavaScript脚本)。
RESTful API设计的几个关键点:
- 资源(Resources):API应该围绕资源构建,资源由URI唯一标识。
- HTTP方法(Methods):使用标准的HTTP方法如GET(读取)、POST(创建)、PUT(更新/全替换)、PATCH(更新/部分替换)、DELETE(删除)进行操作。
- 状态码(Status Codes):利用HTTP状态码来表示操作结果,例如200(成功)、201(已创建)、400(错误请求)、404(未找到)等。
- 表示(Representation):资源的表现形式通常是JSON或XML格式,在HTTP的请求和响应的正文中传输。
- 超媒体(Hypermedia):RESTful API应该提供资源的关联信息,如链接到其他相关资源。
RESTful API设计实例
假设我们有一个用户管理系统,我们可能会设计以下API:
- 获取用户列表: GET /users
- 创建新用户: POST /users
- 获取指定用户: GET /users/{id}
- 更新用户信息: PUT /users/{id}
- 删除用户: DELETE /users/{id}
在实际设计中,你还需要考虑版本控制、认证、权限校验、分页和过滤等多方面因素。
总结起来,了解HTTP协议的基本工作原理以及如何遵循REST原则设计API是成为后端开发者的重要技能。
相关文章:
重生之我要学后端0--HTTP协议和RESTful APIs
http和RESTful APIs HTTP协议RESTful APIs设计RESTful API设计实例 HTTP协议 HTTP(超文本传输协议)是用于分布式、协作式和超媒体信息系统的应用层协议。它是网页数据通讯的基础。工作原理简述如下: 客户端请求(Request…...
深度之眼(二十八)——神经网络基础知识(三)-卷积神经网络
文章目录 一、前言二、卷积操作2.1 填充(padding)2.2 步长2.3 输出特征图尺寸计算2.4 多通道卷积 三、池化操作四、Lenet-5及CNN结构进化史4.1 Lenet-5 一、前言 卷积神经网络–AlexNet(最牛)-2012 Lenet-5-大规模商用(1989) 二、…...
AI Infra简单记录
向量数据库的作用 1. 在AI大模型训练过程中,向量数据库可以有效提升数据检索、特征提取等任务的效率。 2、在AI大模型推理过程中,向量数据库为大模型提供外挂知识库,提升模型时效性与准确性,提供缓存能力,减少调用开…...
三英战吕布 | 第5集 | 温酒斩华雄 | 竖子不足与谋 | 三国演义 | 逐鹿群雄
🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 📌这篇博客分享的是《三国演义》文学剧本第Ⅰ部分《群雄逐鹿》的第5️⃣集《三英战吕布》的经典语句和文学剧本全集台词 文章目录 1.经典语句2.文学剧本台…...
【C语言】自定义类型:结构体
目录 1. 结构体类型的声明 1.1. 结构的一般声明 1.2. 结构的特殊声明 2. 结构体变量的创建和初始化 3. 结构体的自引用 4. 结构体内存对齐 4.1. 对其规则(面试考点) 4.2. 为什么存在内存对齐? 4.2.1. 平台原因(移植…...
算法金 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost 算法大全
大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 决策树是一种简单直观的机器学习算法,它广泛应用于分类和回归问题中。它的核心思想是将复杂的决策过程分解成一系列简单的决…...
[每周一更]-(第103期):GIT初始化子模块
文章目录 初始化和更新所有子模块分步骤操作1. 克隆包含子模块的仓库2. 初始化子模块3. 更新子模块 查看子模块状态提交子模块的更改处理子模块路径错误的问题 该问题的缘由是因为:在写某些代码的时候,仓库中有些文件夹,只提交了文件夹名称到…...
单例模式---线程安全实现
文章目录 1.单例模式的特点😊2.单例模式两种实现🤣🤗😊2.1 饿汉式2.2 懒汉式 3.传统单例模式的线程安全问题4.解决方法4.1静态局部变量4.2加锁4.3双重检查锁(DCL)4.4pthread_once 1.单例模式的特点…...
Agent技术在现代软件开发与应用中的探索
一、引言 随着计算机科学的快速发展,Agent技术作为人工智能和分布式计算领域的重要分支,已经渗透到软件开发的各个方面。Agent技术通过赋予软件实体自主性和交互性,使得软件系统能够更加智能、灵活地响应环境变化和用户需求。本文将对Agent技…...
c语言中extern定义和引用其他文件的变量,(sublime text)单独一个文件编译不会成功
关键字extern的作用 这个很常见的都知道是定义一个外部变量或函数,但并不是简单的建立两个文件,然后在用extern 定义在另一个非最初定义变量的文件里 区分文件和编译运行的文件 例如,一个文件夹里有文件a.c和文件b.c,在sublime text中直接…...
时序数据中的孤立野点、异常值识别及处理方法
目录 参考资料 对时序数据做差分; 参考资料 [1] 离群点(孤立点、异常值)检测方法 2017.6;...
JetBrains PyCharm 2024 mac/win版编程艺术,智慧新篇
JetBrains PyCharm 2024是一款功能强大的Python集成开发环境(IDE),专为提升开发者的编程效率和体验而设计。这款IDE不仅继承了前代版本的优秀特性,还在多个方面进行了创新和改进,为Python开发者带来了全新的工作体验。 JetBrains PyCharm 20…...
MCU解决800V电动汽车牵引逆变器的常见设计挑战的3种方式
电动汽车 (EV) 牵引逆变器是电动汽车的。它将高压电池的直流电转换为多相(通常为三相)交流电以驱动牵引电机,并控制制动产生的能量再生。电动汽车电子产品正在从 400V 转向 800V 架构,这有望实现: 快速充电 – 在相同…...
《逆向投资 邓普顿的长赢投资法》
接下来跟大家一起学习《逆向投资 邓普顿的长赢投资法》。邓普顿被誉为20世纪最伟大的选股人之一,我非常确信林奇在他的《战胜华尔街》里也提到了邓普顿,可惜实在想不起来林奇是怎么形容邓普顿的。 邓普顿拥有70多年的投资生涯,在他晚年时曾总…...
C++中main函数的参数、返回值分别什么意思?main函数返回值跟普通函数返回值一样吗?
在C中,main函数是程序的入口点,即程序开始执行的地方。main函数可以有两种形式的签名(signature): 标准的main函数,不接受任何参数,也不返回任何值: int main() {// 代码... }带有参…...
Java程序员学习Go开发Higress的WASM插件
Java程序员学习Go开发Higress的WASM插件 契机 ⚙ 今年天池大赛有higress相关挑战,研究一下。之前没搞过go,踩了很多坑,最主要的就是tinygo打包,多方寻求解决无果,结论是tinygo0.32go1.19无法在macos arm架构下打包。…...
Python入门-基本数据类型-数字类型
数字类型是指表示数字或者数值的数据类型。在Python语言中,数字类型有整型(int)、 浮点型(float)、复数型(complex),对应数学中的整数、小数和复数,此外还有一种特殊 的整型,即布尔型(bool)。本节将对这4种数字类型进行详细介绍。…...
小程序web-view无法打开该页面的解决方法
问题:开发者工具可以正常打开,正式上线版小程序使用 web-view 组件测试时提示:“无法打开该页面,不支持打开 https://xxxxxx,请在“小程序右上角更多->反馈与投诉”中和开发者反馈。” 解决方法:需要配…...
海外媒体发稿:媒体宣发套餐的作用分享-华媒舍
一、神奇媒体宣发套餐 神奇媒体宣发套餐是一项专业的多媒体宣传推广服务,旨在帮助企业、个人快速提升品牌知名度和曝光度。它通过全面覆盖主流媒体、社交网络以及各大网络平台,将您的宣传信息传递给广泛的受众群体,实现全方位、多角度的宣传…...
【R语言】plot输出窗口大小的控制
如果需要输出png格式的图片并设置dpi,可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小,在输出的时候保持宽度和高度一致即可,步骤如下: 如上的“10…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
