實習項目包裝--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://www.pswp.cn/bicheng/96390.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96390.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96390.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ICCV-2025 | 中科院自動化所世界模型助力具身導航!NavMorph:連續環境中的視覺語言導航自演化世界模型

作者&#xff1a;Xuan Yao1,2^{1,2}1,2, Junyu Gao1,2^{1,2}1,2, Changsheng Xu1,2,3^{1,2,3}1,2,3單位&#xff1a;1^{1}1中科院自動化所多模態人工智能系統國家重點實驗室&#xff0c;2^{2}2中國科學院大學人工智能學院&#xff0c;3^{3}3鵬城實驗室論文標題&#xff1a;NavM…

【ARDUINO】ESP8266的AT指令返回內容集合

一、基礎測試指令(確認模塊通信) 1. AT(測試模塊是否響應) 功能:檢測ESP8266與控制器(如Arduino)的串口通信是否正常。 返回內容: 成功:OK(無額外數據,僅確認通信正常) 失敗:無返回(可能是波特率不匹配、接線錯誤) 示例:發送:AT 返回: OK二、Wi-Fi模式配置指…

Mockoon:開源免費的本地Mock服務工具,提升前后端聯調效率

你有沒有過這種經歷&#xff1f;做前端開發時&#xff0c;后端同事的接口還沒寫完&#xff0c;你這邊要調頁面數據&#xff0c;只能對著空控制臺發呆&#xff1f;要么手動寫個 JSON 文件當假數據&#xff0c;改一次數據就得重新保存文件、刷新頁面&#xff1b;要么用在線 Mock …

【Mysql|第一篇】Mysql的安裝與卸載、Navicat工具的使用

一、Mysql的安裝與卸載&#xff1a; 1、查看是否安裝過mysql&#xff1a; &#xff08;1&#xff09;cmd中輸入mysql看是否有顯式提醒 &#xff08;2&#xff09;右擊此電腦&#xff0c;選擇管理&#xff0c;在左側欄中找到服務&#xff0c;查看是否有與mysql相關的 2、卸載的…

貪心算法應用:流行病干預策略問題詳解

Java中的貪心算法應用&#xff1a;流行病干預策略問題詳解 貪心算法是一種在每一步選擇中都采取當前狀態下最優的選擇&#xff0c;從而希望導致全局最優解的算法策略。在流行病干預策略問題中&#xff0c;貪心算法可以有效地幫助我們做出資源分配決策&#xff0c;以達到最優的防…

git刪除最近一次提交包括歷史記錄。

方法一&#xff1a;刪除最近的一次提交&#xff08;最常見&#xff09; 如果你只是想撤銷最后一次提交&#xff0c;這是最簡單的方法。在本地刪除提交 使用 git reset --hard 命令&#xff0c;將你的本地分支回退到上一次提交。Bashgit reset --hard HEAD^HEAD^ 指的是 HEAD 的…

前端拖拽功能實現全攻略

前端拖拽功能實現指南 設計一個拖拽組件確實需要考慮不少細節。下面我為你梳理了從核心思路、關鍵實現到注意事項的完整方案&#xff0c;并用表格對比了 Vue 和 React 的實現差異&#xff0c;希望能幫你全面掌握。 &#x1f9e0; 一、核心設計思路 一個拖拽組件的核心在于感…

ASP.NET MVC 連接 MySQL 數據庫查詢示例

為您創建一個完整的 ASP.NET MVC 應用程序&#xff0c;演示如何通過點擊按鈕連接 MySQL 數據庫并查詢數據表。 完整實現步驟 1. 首先安裝必要的 NuGet 包 在項目中安裝以下 NuGet 包&#xff1a; MySql.Data Dapper&#xff08;可選&#xff0c;用于簡化數據訪問&#xff0…

合理安排時間節點,避免影響正常生產——制造企業軟件系統上線的關鍵考量

在制造企業的發展中&#xff0c;引入新的軟件系統是提升管理效率、優化業務流程的重要舉措。然而&#xff0c;軟件系統的上線過程如果安排不當&#xff0c;很可能會對企業的正常生產造成負面影響。作為一名制造企業的行政經理&#xff0c;在軟件選型和推進使用的過程中&#xf…

【一包通刷】晶晨S905L(B)/S905L2(B)/S905L3(B)-原機安卓4升級安卓7/安卓9-通刷包

【一包通刷】晶晨S905L(B)&#xff0f;S905L2(B)&#xff0f;S905L3(B)-原機安卓4升級安卓7&#xff0f;安卓9-通刷固件包線刷方法&#xff1a;1、準備好一根雙公頭USB線刷刷機線&#xff0c;長度30-50CM長度最佳&#xff0c;同時準備一臺電腦&#xff1b;2、電腦上安裝好刷機工…

Vite開發:從入門到精通

序章&#xff1a;構建之道現代前端的破局者前端發展簡史&#xff1a;從 Grunt、Gulp、Webpack 到 Vite構建工具的本質與未來為什么是 Vite&#xff1f;——新時代的構建哲學本書閱讀導覽與學習路徑第一篇 入門啟蒙識得 Vite 真面目第1章 Vite 初識什么是 Vite&#xff1f;設計理…

Spring事件監聽機制(二)

接著之前的事件監聽機制實現&#xff0c;我們可以進一步優化。從以下兩個方面&#xff1a;1.使用EventListener注解Configuration public class TestListener2 {public static void main(String[] args) {AnnotationConfigApplicationContext context new AnnotationConfigApp…

STM32物聯網項目---ESP8266微信小程序結合OneNET平臺MQTT實現STM32單片機遠程智能控制---代碼篇(四)

一、簡介該篇代碼實現了ESP8266上傳數據到云平臺的功能&#xff08;可以更改命令和溫度的數據&#xff09;&#xff0c;我只測試了上傳數據&#xff0c;是沒有問題的&#xff0c;如果自己由別的需求可以自行在云平臺創建設備和更改代碼&#xff1a;二、工程源碼這個代碼是進行驗…

城際班車駕駛員安全學習課程

背景 正在做一個班車預約小程序&#xff0c;里面需要增加一個功能&#xff1a;駕駛員在線學習打卡功能&#xff1a; 圖文學習內容&#xff0c;學習完之后&#xff0c;一鍵打卡&#xff1a;學習完畢&#xff1b;視頻學習內容&#xff0c;看完后&#xff0c;一鍵打卡&#xff1…

Cy5-Tyramide, Cyanine 5 Tyramide;1431148-26-3

一、基本內容&#xff1a; Cyanine 5 Tyramide (Tyramide-Cy5) 是一種紅色熒光染料&#xff0c;被用作辣根過氧化物酶 HRP 催化沉積的報告熒光底物&#xff0c;是一種免疫測定和核酸原位雜交中的信號放大技術。 英文名稱&#xff1a;Cy5-Tyramide, Cyanine 5 Tyramide中文名稱…

5.1 機器學習 - 模型調參

模型調參是提升泛化能力的關鍵步驟&#xff0c;核心分為 “人工調參”&#xff08;依賴經驗與實驗管理&#xff09;和 “自動調參”&#xff08;依賴算法與算力&#xff09;&#xff0c;二者適用場景不同&#xff0c;需結合數據量、算力資源和項目周期選擇。 一、人工調整超參數…

音視頻技術全景:從采集到低延遲播放的完整鏈路解析

一、為什么需要音視頻知識普及 在當下的數字化時代&#xff0c;音視頻已經不再是單純的“附屬功能”&#xff0c;而是成為教育、醫療、安防、金融、低空經濟、工業互聯網等領域的核心生產要素。一條視頻鏈路的質量&#xff0c;直接決定了課堂能否互動順暢、手術能否遠程指導、…

Mybatis常見問題

Mybatis常見問題 什么是Mybatis&#xff1f; &#xff08;1&#xff09;Mybatis是一個半ORM&#xff08;對象關系映射&#xff09;框架&#xff0c;它內部封裝了JDBC&#xff0c;加載驅動、創建連接、創建statement等繁雜的過程&#xff0c;開發者開發時只需要關注如何編寫SQL語…

Redis(主從復制)

目錄 一 為什么要有主從 Redis 二 主從模式 1. 什么是主從模式&#xff1f; 2. 相關操作 3. 查看主從信息&#xff1a; 4. 斷開與主節點的關系&#xff1a; 5. 主從結構&#xff1a; 6. 建立主從結構流程&#xff1a; 7. 全量/增量復制流程&#xff1a; 1. 全量復制 …

算法與數據結構實戰技巧:從復雜度分析到數學優化

算法與數據結構實戰技巧&#xff1a;從復雜度分析到數學優化 引言&#xff1a;為什么算法能力決定你的代碼“天花板” 作為程序員&#xff0c;你是否曾遇到這樣的困惑&#xff1a;同樣是處理數據&#xff0c;別人的代碼能輕松扛住10萬并發請求&#xff0c;而你的系統在1萬數據量…