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

实习项目包装--HTTP 协议和 Web API

好的,完全没问题!你问到了一个非常核心且基础的知识领域,这是现代Web开发和几乎所有网络应用的基石。我们暂别嵌入式系统,专门来上一堂关于 HTTP 协议和 Web API 的详细课程。

我会从最根本的概念讲起,逐步深入到你所问的各个部分,并用大量例子帮助你理解。


第一部分:网络通信的基础——协议 (Protocol)

想象一下你和一个外国朋友写信:

  1. 你们需要一种共同的语言(比如英语)。

  2. 信需要放在信封里,写上收件人地址寄件人地址

  3. 需要遵循邮局的投递规则(贴多少邮票、投到邮筒里)。

计算机之间的通信也是如此。它们必须遵循一套预先定义好的、非常精确的规则,这套规则就叫做协议

HTTP 就是其中最重要的一套规则,专门用于 Web


第二部分:什么是 HTTP?—— Web 世界的基础语言

  • 全称Hypertext Transfer Protocol (超文本传输协议)

  • 作用: 它定义了客户端(如浏览器、手机App)和服务器(存放网站和数据的计算机)之间如何交换信息。

  • 工作模式请求-响应模型

    • 客户端 发起一个 HTTP 请求

    • 服务器 处理请求后,返回一个 HTTP 响应

  • 特点:

    • 无连接: 服务器在处理完一个请求并发送响应后,就断开连接,不会记住这个客户端。这节省了服务器资源。

    • 无状态: 这是最关键的一点。服务器不会记住你上一次的请求。对你来说,这意味着你登录一个网站后,服务器如何知道你还在登录?答案是通过 Cookie 等技术在每次请求中都额外带上你的身份信息,来“模拟”出状态。


第三部分:深入理解 HTTP 请求 (Request) 和响应 (Response)

1. HTTP 请求 (Request) - “你点的菜”

当一个浏览器地址栏输入 www.example.com 并回车时,它就构建并发送了一个 HTTP 请求。这个请求包含三个核心部分:

  • 请求行: 定义了要做什么
    GET /index.html HTTP/1.1
    | | |
    方法 资源路径 协议版本

  • 请求头: 定义了如何做或提供了附加信息。是一些 Key: Value 对。
    Host: www.example.com // 告诉服务器域名(一个IP可能对应多个网站)
    User-Agent: Mozilla/5.0... // 告诉服务器客户端的类型和版本
    Accept: text/html // 告诉服务器我希望能接收HTML格式的内容
    Authorization: Bearer xyz... // 身份验证信息(如果需要登录)

  • 请求体可选。通常只在发送数据给服务器时使用,比如提交表单。
    username=john&password=123456

2. HTTP 响应 (Response) - “后厨上的菜”

服务器收到请求后,会处理并返回一个 HTTP 响应。它也包含三个核心部分:

  • 状态行: 定义了结果怎么样
    HTTP/1.1 200 OK
    | | |
    协议版本 状态码 状态消息

  • 响应头: 描述了返回的数据信息。也是 Key: Value 对。
    Content-Type: text/html; charset=UTF-8 // 内容的类型是HTML文本,编码是UTF-8
    Content-Length: 1024 // 内容长度是1024字节
    Set-Cookie: sessionid=abc123;... // 指示浏览器设置一个Cookie

  • 响应体: 最重要的部分,即请求的真正内容,比如网页的HTML代码、图片数据、JSON字符串等。
    <!DOCTYPE html><html><head><title>Example</title>...


第四部分:详解 HTTP 方法 (Methods / Verbs) - “你要做什么动作”

这是 RESTful API 设计的灵魂。它们定义了请求的意图

方法英文含义中文作用是否幂等示例
GETRetrieve获取安全地从服务器获取资源。不应修改任何数据。获取新闻列表、查看用户信息
POSTCreate创建向服务器提交数据,通常用于创建新资源。用户注册、发表一篇新文章
PUTUpdate更新完整更新一个已有资源。客户端需要提供资源的全部属性。更新用户个人资料(提供所有字段)
PATCHUpdate更新部分更新一个资源。客户端只提供需要修改的属性。只修改用户头像(只提供头像字段)
DELETEDelete删除请求服务器删除指定的资源。删除一篇文章

重要概念:幂等性

  • 幂等:意味着无论你执行一次还是多次相同的操作,其最终效果是一样的

    • GET /user/1:执行1次或10次,都只是获取数据,不会改变数据。

    • PUT /user/1 {name: "John"}:执行1次或10次,用户的name最终都是John

    • DELETE /user/1:执行1次,用户被删除。再执行,结果依然是“用户不存在”。

  • 非幂等:意味着每次执行都可能产生不同的效果或创建新的资源

    • POST /articles:每次执行都会创建一篇新的文章。


第五部分:详解 HTTP 状态码 (Status Codes) - “服务员给你的答复”

状态码是一个3位数字,快速告诉你请求的结果。它分为5类:

1xx (信息性) - “我知道了,正在处理…”
  • 不常见,表示请求已被接收,继续处理。

2xx (成功) - “搞定!”
  • 200 OK最常用。请求成功,响应体中有所需数据。

  • 201 Created创建成功POST 请求成功创建了新资源,响应头 Location 通常会包含新资源的访问地址。

  • 202 Accepted已接受。请求已接受处理,但处理尚未完成。适用于异步任务。

  • 204 No Content成功但无内容。服务器成功处理了请求,但不需要返回任何内容(如 DELETE 请求成功)。

3xx (重定向) - “你去别处看看…”
  • 301 Moved Permanently永久移动。请求的资源已永久移动到新位置,未来所有请求都应使用新的URL。

  • 302 Found临时移动。请求的资源临时从另一个URL响应。

  • 304 Not Modified未修改。用于缓存。告诉客户端,你本地缓存的版本还没过期,直接用吧。

4xx (客户端错误) - “你搞错了!”
  • 400 Bad Request错误请求。服务器无法理解请求的格式(比如你发的JSON语法错误)。

  • 401 Unauthorized未认证。需要身份验证,但客户端没有提供或验证失败(比如密码错误)。意思是“你是谁?”

  • 403 Forbidden禁止访问。服务器理解请求,但拒绝执行。身份验证成功,但权限不足。意思是“我知道你是谁,但你不准做这个。”

  • 404 Not Found找不到。请求的资源在服务器上不存在。最常见的错误之一。

  • 405 Method Not Allowed方法不允许。比如对只读资源发送了 POST 请求。

5xx (服务器错误) - “我搞砸了…”
  • 500 Internal Server Error服务器内部错误。一个笼统的错误消息,表示服务器遇到了意外情况。

  • 502 Bad Gateway坏网关。服务器作为网关或代理,从上游服务器收到了无效响应。

  • 503 Service Unavailable服务不可用。服务器暂时无法处理请求(可能由于过载或维护)。


第六部分:综合实战——再看 Door State Service API

现在,让我们用刚学的知识,重新审视你项目中的 API 设计,你会发现一切变得如此清晰!

  1. 获取所有车门状态

    • 请求GET /api/v1/doors

      • 方法GET -> 意图是获取数据,不会改变车门状态。

    • 响应200 OK

      • 状态码200 -> 成功获取到了数据。

      • : JSON 格式的车门状态数据。

  2. 解锁左前门

    • 请求PATCH /api/v1/doors/frontLeft

      • 方法PATCH -> 意图是部分更新 frontLeft 这个资源。我们只发送要修改的 lock 字段,非常高效且符合语义。

      • Content-Type: application/json -> 告诉服务器,我发过来的请求体是JSON格式的。

      • {"lock": "unlocked"} -> 要更新的数据。

    • 可能的响应:

      • 200 OK -> 更新成功,并在响应体中返回更新后的完整状态。

      • 401 Unauthorized -> 请求没有提供有效的身份令牌。

      • 403 Forbidden -> 身份有效,但这个用户没有被授权解锁车门。

      • 404 Not Found -> 也许URL拼错了,服务器没有 frontLeft 这个资源。

      • 500 Internal Server Error -> 服务器成功收到了请求,但在尝试通过CAN总线发送指令时,底层硬件出错了。

总结

你所问的这部分知识,属于 Web 开发基础 和 网络协议 的范畴,具体来说是 HTTP 协议 的应用。它是:

  1. 前端与后端沟通的桥梁:无论是浏览器还是你的手机App,都通过HTTP与服务器对话。

  2. RESTful API 设计的根本:RESTful 风格完全是建立在 HTTP 协议的这些特性(方法、状态码、无状态)之上的。

  3. 软件工程师的必备常识:无论你做哪个端的开发,深入理解HTTP都至关重要。

希望这次系统性的讲解能帮你彻底理清这块知识!这是一个非常重要的基础,打好这个基础,你之后学习Web开发、API设计、乃至网络编程都会事半功倍。


文章转载自:

http://Q4JRK5cU.gwqkk.cn
http://yZ98oX8f.gwqkk.cn
http://iyDx2QMq.gwqkk.cn
http://RhYQMqr2.gwqkk.cn
http://1xSIkSsi.gwqkk.cn
http://6KWN9za1.gwqkk.cn
http://TY8PI7u8.gwqkk.cn
http://KsLQbVOB.gwqkk.cn
http://CTcWKN58.gwqkk.cn
http://DDEv4Ad7.gwqkk.cn
http://u50Idvm7.gwqkk.cn
http://AzWZYTNC.gwqkk.cn
http://2CY0rRrR.gwqkk.cn
http://rCrG8G7b.gwqkk.cn
http://KwK3qZIt.gwqkk.cn
http://dHhSg5Fv.gwqkk.cn
http://dahWPHYR.gwqkk.cn
http://44fc1UCO.gwqkk.cn
http://X7y28gJV.gwqkk.cn
http://z68DNOJJ.gwqkk.cn
http://NkfJ0PNX.gwqkk.cn
http://vX3UQrLI.gwqkk.cn
http://OrUWpejk.gwqkk.cn
http://AIE6vqZf.gwqkk.cn
http://JqXOI60R.gwqkk.cn
http://bjptOFRi.gwqkk.cn
http://F03yJ7vD.gwqkk.cn
http://tDuL3wND.gwqkk.cn
http://edjiQzIe.gwqkk.cn
http://ssjFnoQT.gwqkk.cn
http://www.dtcms.com/a/374988.html

相关文章:

  • linux升级系统,重启出现Minimal BASH-like line editingis supported
  • ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
  • Qwen3微调教程:从零开始训练你的定制语言模型
  • 本地一键部署IndexTTS2,生成情绪饱满的语音,支持Windows和Mac
  • VMware虚拟机CentOS磁盘扩容完整指南(解决growpart报错 LVM扩容)
  • 【增删改查操作】
  • MySQL 多表操作与复杂查询:深入理解多表关系和高级查询
  • 网络相关知识整理
  • 提升网站用户体验的方法 | 网站优化与用户界面设计
  • CSS的文本样式
  • Flex布局——详解
  • 深度解析CSS单位与媒体查询:构建现代化响应式布局的核心技术
  • 项目组件抽离封装思路
  • Elasticsearch面试精讲 Day 13:索引生命周期管理ILM
  • 【MySQL】从零开始了解数据库开发 --- 数据类型
  • ElasticSearch复习指南:从零搭建一个商品搜索案例
  • 宋红康 JVM 笔记 Day15|垃圾回收相关算法
  • 【01】完整的安卓二次商业实战-详细的初级步骤同步项目和gradle配置以及开发思路-优雅草伊凡
  • 【python实用小脚本-211】[硬件互联] 桌面壁纸×Python梦幻联动|用10行代码实现“开机盲盒”自动化改造实录(建议收藏)
  • 前端安全攻防:XSS, CSRF 等常见威胁的防范与检测指南
  • 算法题(203):矩阵最小路径和
  • 强化学习在复杂调度问题中的常见陷阱与改进思路
  • AI基础设施——NVIDIA GB300 NVL72
  • 实战项目-----在图片 hua.png 中,用红色画出花的外部轮廓,用绿色画出其简化轮廓(ε=周长×0.005),并在同一窗口显示
  • 第一章 神经网络的复习
  • Spring Cloud 配置中心
  • Typescript入门-d.ts类型声明文件讲解
  • DBF Viewer 2000:专业的DBF文件查看与编辑工具
  • 【字符压缩存在整数32bit技术】
  • 【芯片设计-信号完整性 SI 学习 1.0 -- SI 介绍】