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

发布于:2025-09-10 ⋅ 阅读:(12) ⋅ 点赞:(0)

好的,完全没问题!你问到了一个非常核心且基础的知识领域,这是现代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 设计的灵魂。它们定义了请求的意图

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

重要概念:幂等性

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

    • 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设计、乃至网络编程都会事半功倍。


网站公告

今日签到

点亮在社区的每一天
去签到