当前位置: 首页 > news >正文

重生之我要学后端0--HTTP协议和RESTful APIs

http和RESTful APIs

  • HTTP协议
  • RESTful APIs设计
  • RESTful API设计实例

HTTP协议

HTTP(超文本传输协议)是用于分布式、协作式和超媒体信息系统的应用层协议。它是网页数据通讯的基础。工作原理简述如下:

  1. 客户端请求(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请求不显示),响应是响应体。

  1. 服务器响应(Response):服务器接收并处理客户端的请求后,返回一个HTTP响应。这个响应包括:
  • 状态行:包含所使用的HTTP版本、状态码(如200 OK, 404 Not Found等)和状态消息。
  • 响应头部:包含服务器类型、内容类型、编码、缓存控制等信息。
  • 空行:指示头部结束。
  • 可选的响应正文:包含请求的资源内容,例如HTML页面、图像等。
    在这里插入图片描述
    在这里插入图片描述
  1. 连接管理:按照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&#xf…...

深度之眼(二十八)——神经网络基础知识(三)-卷积神经网络

文章目录 一、前言二、卷积操作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.单例模式的特点&#x1…...

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…...

【shell脚本实战案例】数据磁盘初始化

文章目录 一、案例应用场景二、案例需求三、案例算法四、代码实现五、实现验证 🌈你好呀!我是 山顶风景独好 🎈欢迎踏入我的博客世界,能与您在此邂逅,真是缘分使然!😊 🌸愿您在此停留…...

1.7 计算机体系结构分类

Flynn分类法 CISC与RISC...

数据结构之B树:深入了解与应用

目录 1. B树的基本概念 1.1 B树的定义 1.2 B树的性质 1.3 B树的阶 2. B树的结构 2.1 节点结构 2.2 节点分裂 2.3 节点合并 3. B树的基本操作 3.1 搜索 3.2 插入 3.3 删除 4. B树的应用 4.1 数据库索引 4.2 文件系统 4.3 内存管理 5. B树的优势和局限 5.1 优势…...

Tensorflow入门实战 T06-Vgg16 明星识别

目录 1、前言 2、 完整代码 3、运行过程结果 4、遇到的问题 5、小结 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制 1、前言 这周主要是使用VGG16模型,完成明星照片识别。 2、 完整代…...

SpringBoot 3.3.1 + Minio 实现极速上传和预览模式

统一版本管理 <properties><minio.version>8.5.10</minio.version><aws.version>1.12.737</aws.version><hutool.version>5.8.28</hutool.version> </properties><!--minio --> <dependency><groupId>io.m…...

Linux: network: 丢包分析的另一个途径 tracing

丢包的另一个思路&#xff0c;内核里有些counter的计数&#xff0c;记录的不准确。这个时候怎么办&#xff1f;就需要使用另外一个方式&#xff1a;/sys/kernel/debug/tracing/event/skb/kfree_skb 的跟踪功能。这个算是对counter的一个补充&#xff0c;可以拿来做统计分析使用…...

【保姆级教程+配置源码】在VScode配置C/C++环境

目录 一、下载VScode 1. 在官网直接下载安装即可 2. 安装中文插件 二、下载C语言编译器MinGW-W64 三、配置编译器环境变量 1. 解压下载的压缩包&#xff0c;复制该文件夹下bin目录所在地址 2. 在电脑搜索环境变量并打开 3. 点击环境变量→选择系统变量里的Path→点击编…...

Qt creator实现一个简单计算器

目录 1 界面设计 2 思路简介 3 代码 目录 1 界面设计 ​2 思路简介 3 代码 3.1 widget.h 3.2 widget.c 4 完整代码 在这里主要记载了如何使用Qt creator完成一个计算器的功能。该计算器可以实现正常的加减乘除以及括号操作&#xff0c;能实现简单的计算器功能。 1 界…...

Java代码基础算法练习-计算被 3 或 5 整除数之和-2024.06.29

任务描述&#xff1a; 计算 1 到 n 之间能够被 3 或者 5 整除的数之和。 解决思路&#xff1a; 输入的数字为 for 循环总次数&#xff0c;每次循环就以当前的 i 进行 3、5 的取余操作&#xff0c;都成立计入总数sum中&#xff0c;循环结束&#xff0c;输出 sum 的值 代码示例&…...

Socket编程详解(二)核心代码讲解

本文对代码的讲解基于上一篇博客 快速链接 Socket编程详解&#xff08;一&#xff09;服务端与客户端的双向对话 小试牛刀1&#xff1a;委托声明的关键字和委托方法使用的方法名是不一样的名称 可读性&#xff1a;有时&#xff0c;委托的名称可能描述了它的用途或它在哪里被…...

一个公司多个网站做优化/推广平台

1. net start/stop w3svc这个command主要用于开启/停止服务 www service this command is used to start or stop www service. it commonly uses to reset w3svc after the IIS configuration is modified. notes: 不要w3svc和当个website搞混了。如果net stop w3sv…...

网站建设代码/优秀网站设计案例

假设容器名为myubuntu&#xff0c;要从宿主机里边拷贝的文件路径为/root/1.py&#xff0c;现在将1.py文件拷贝到容器的 /home路径下面&#xff0c; 但是出现错误"docker cp" requires exactly 2 arguments.&#xff0c;则说明路径的格式写错了&#xff0c;可能是多出…...

建设网站的功能地位/中国十大品牌策划公司

给定一个偶数长度的数组&#xff0c;其中不同的数字代表着不同种类的糖果&#xff0c;每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。 示例 1: 输入: candies [1,1,2,2,3,3] 输出: 3 解析: 一共有三种种类的糖果…...

做网站制作较好的公司/成都疫情最新消息

一&#xff0e;简介 0. 页面的生命周期。 1. WebForm后台页面类继承于Page类&#xff0c;Page类实现了IHttpHandler接口。 2. 前台页面类继承于后台页面类。 3. 先调用PageLoad方法&#xff0c;再调用Render方法生成html代码。 二. 加密安全 互联网没有绝对的安全&#xff0c;登…...

土木特网站建设/目前最新的营销模式有哪些

图卷积&#xff08;3&#xff09;——谱域图卷积&#xff08;2&#xff09; 图傅里叶变换 将图中的nnn个节点表示为x[x1,x2,⋯,xn]T∈Rnx\left[x_{1}, x_{2}, \cdots, x_{n}\right]^{T} \in \mathbb{R}^{n}x[x1​,x2​,⋯,xn​]T∈Rn&#xff0c;每一个节点上有一个信号值&am…...

建站需要注意哪些/小程序如何推广运营

这种代码通常在类似tab选择的那种 拥有select的就是选中的状态 应用的场景还是很多的 $(".commodity").click(function(){if($(this).hasClass("select")){$(this).removeClass(" select") ;}else{$(this).addClass(" select") ;} })…...