雜談|RestFul和http的區別

前言

? ? ? ? 今天和我一組的小伙伴,在對接一個接口時,客戶將DELETED請求設置了body參數,導致一個功能反復搞了半天,今天就來說下這兩者的區別

1.HTTP概述

????????HTTP(HyperText Transfer Protocol)是一種用于從WWW(萬維網)服務器傳輸超文本到本地瀏覽器的傳輸協議。它使得瀏覽器可以更加高效地工作,同時減少網絡傳輸量。HTTP采用了請求/響應模型,客戶端向服務器發送一個請求,服務器返回相應的響應。這種通信過程包括以下幾個關鍵環節:

  1. 請求消息(Request Message):由請求行、請求頭、空行和消息體組成。請求行包括HTTP方法、URL和HTTP版本。
  2. 響應消息(Response Message):由狀態行、響應頭、空行和響應體組成。狀態行包括HTTP版本、狀態碼和原因短語。

常見的HTTP方法包括:

  • GET:用于請求資源
  • POST:用于提交數據
  • PUT:用于更新資源
  • DELETE:用于刪除資源

????????HTTP是無狀態的協議,即每個請求都是獨立的,服務器不會保存任何請求的狀態信息。

2. RESTful概述

????????RESTful(Representational State Transfer)是一種軟件架構風格,主要用于設計網絡應用的API。它基于以下幾個原則:

  1. 資源(Resources):RESTful以資源為中心,資源通過URI(統一資源標識符)進行標識。
  2. 統一接口(Uniform Interface):RESTful API通過一組標準的HTTP方法(GET、POST、PUT、DELETE)對資源進行操作。
  3. 無狀態(Stateless):每個請求都包含了處理該請求所需的全部信息,服務器不會在請求之間保存任何狀態。
  4. 緩存(Cacheable):響應應該明確標記為可緩存或不可緩存,以提高客戶端的效率。

????????RESTful設計風格使得API更具一致性和可維護性,同時利用HTTP協議的標準特性來簡化網絡應用的開發。

3.HTTP與RESTful的主要區別
  • URL表達形式不同

    • HTTP接口的URL表達形式可以不遵循任何標準格式。
    • RESTful調用的URL必須遵循REST架構風格的規范,通常包括資源路徑。
  • 請求方法不同

    • HTTP接口調用可以使用GET、POST、PUT、DELETE等HTTP請求方法。
    • RESTful調用嚴格遵循標準的HTTP方法,并且這些方法具有特定的語義。
  • 數據傳輸格式不同

    • HTTP接口調用可以使用任意數據格式,如form、json、xml等。
    • RESTful調用通常使用JSON或XML數據格式進行數據傳輸,強調數據的自描述性。
  • 資源定義不同

    • HTTP接口調用不一定需要資源的具體定義。
    • RESTful調用要求在URL中明確定義資源,每個資源都有一個唯一的標識符URI。
4.詳細對比分析
4.1請求方法

????????HTTP接口調用可以使用各種HTTP方法,而RESTful嚴格限定了方法的使用場景。例如,GET方法僅用于獲取資源,POST方法用于創建資源,PUT方法用于更新資源,DELETE方法用于刪除資源。這種規范化的設計提高了API的清晰度和一致性。

????????需要特別指出的是,在標準的請求中,GET和DELETE方法是不能往body里面傳參數的。這是因為GET方法主要用于請求資源,而不是發送數據,DELETE方法用于刪除資源,因此也不需要在body中傳遞參數。

4.2 數據傳輸格式

????????HTTP接口調用的數據格式可以是form、json、xml等多種形式,而RESTful更傾向于使用JSON或XML。這種統一的數據格式使得客戶端和服務器之間的數據交換更為一致和高效。

4.3 資源定義

????????HTTP接口調用不依賴于具體的資源定義,而RESTful強調資源和API請求的對應關系。每個資源在RESTful API中都有一個唯一的URI,通過標準的HTTP方法對這些資源進行操作,使得API設計更加直觀和結構化。

5. 其他特點
5.1?資源標準化

????????RESTful是基于HTTP協議的,HTTP協議定義的URL必須符合URI(Uniform Resource Identifier)標準。URI由協議、主機、資源路徑、查詢字符串和片段組成。因此,RESTful要求每個資源都有一個唯一的標識符URI,這使得資源的管理更加標準化和系統化。

5.2 無狀態

????????因為HTTP是一種無狀態協議,所以RESTful也是無狀態的。即服務器不會保存任何客戶端請求的歷史信息。每個請求都是獨立的,服務器不會在請求之間保留會話狀態。這種無狀態性簡化了服務器的設計,同時也增強了系統的可擴展性和可靠性。

5.3 緩存機制

????????由于RESTful是基于HTTP標準定義的,因此具有HTTP緩存機制。客戶端可以在收到數據后將其存儲在本地緩存中,在下一次請求相同資源時可以減少網絡傳輸,提高性能。這種緩存機制可以顯著提高應用的響應速度和用戶體驗。

5.4 GET和DELETE請求的限制

????????在標準的HTTP請求中,GET和DELETE方法是不能往body里面傳參數的。GET方法主要用于請求資源,而不是發送數據,DELETE方法用于刪除資源,因此這兩種方法都不需要在body中傳遞參數。GET請求的參數通常附加在URL中,而DELETE請求通常只需要URI來標識需要刪除的資源。那么有標準就有魔改,有些依賴包就會提供,但是這是一個不好的習慣,還是建議大家你不要這么玩

6. 總結

????????RESTful是HTTP接口調用的一種特殊實現,遵循REST架構風格的規范,能夠提供更加標準化、統一化、可讀性和易用性的API設計。與傳統的HTTP接口調用相比,RESTful調用具有更加清晰明了、易于理解和維護的API設計,擴展性和靈活性也更強。在現代Web應用開發中,理解和使用RESTful架構風格能夠大大提高開發效率和應用的可維護性。

????????通過本文的介紹,希望讀者能夠清楚地理解HTTP和RESTful的基本概念及其主要區別,為今后的Web應用開發提供有力的支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/17590.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/17590.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/17590.shtml

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

相關文章

操作系統5_虛擬存儲器

操作系統5_虛擬存儲器 文章目錄 操作系統5_虛擬存儲器1. 虛擬存儲器1.1 虛擬存儲器的引入1.2 虛擬存儲器的概念1.3 虛擬存儲器的特征1.4 虛擬存儲器的實現方法2. 請求分頁存儲管理2.1 請求分頁中的硬件支持2.2 內存分配策略和分配算法2.3 調頁策略2.4 頁面置換算法2.4.1 最佳置…

docker部署相關命令

docker部署相關操作 查看docker基本信息 docker info查看docker中所有鏡像 docker images查看docker中所有容器 docker ps # 已啟動的容器 docker ps -a # 所有容器 docker ps -a -s # 查看所有容器和大小從鏡像創建容器并運行 docker run -it 鏡像名 # 簡單命令 dock…

c++——模板初始識

1.函數模板 我們經常用到Swap函數交換兩個值。由于需要交換的數據的類型不同,我們就需要寫不同參數類型的同名函數,也就是函數重載: 然而這三個函數的邏輯是一樣的,寫這么多有些多此一舉,通過函數模版可以寫一個通用…

LabVIEW機器視覺在自動化生產線中的應用是什么?

LabVIEW機器視覺技術在自動化生產線中有廣泛的應用,主要包括以下幾個方面: 質量控制與檢測: 缺陷檢測:使用機器視覺系統實時檢測產品表面的缺陷,如劃痕、裂紋、污漬等,確保產品質量。尺寸測量:通…

【量算分析工具-水平面積】GeoServer改造Springboot番外系列五

【量算分析工具-概述】GeoServer改造Springboot番外系列三-CSDN博客 【量算分析工具-水平距離】GeoServer改造Springboot番外系列四-CSDN博客 【量算分析工具-水平面積】GeoServer改造Springboot番外系列五-CSDN博客 【量算分析工具-方位角】GeoServer改造Springboot番外系列…

GoldenEye-v1(vulnhub)靶機練習實踐報告

GoldenEye-v1****靶機練習實踐報告 一、安裝靶機 靶機是.ova文件,需要用VirtualBox打開,但我習慣于使用VMWare,因此修改靶機文件,使其適用于VMWare打開。 解壓ova文件,得到.ovf文件和.vmdk文件。 用記事本打開.ovf文件并修改“…

Element Plus 快速入門

Element Plus 快速入門 Element Plus 是一個基于 Vue 3.0 的桌面端組件庫,它包含了豐富的組件和實用的工具,可以幫助開發者快速構建 Vue 3.0 應用。 安裝 首先,我們需要在項目中安裝 Element Plus。在終端中運行以下命令: npm…

gmssl vs2010編譯

1、虛擬機win10 x64,離線安裝vs2010和2010sp1補丁; 2、安裝ActivePerl_v5.28.1.0000和nasm-2.16.03-installer-x64均是默認完整安裝; nasm官網下載: Index of /pub/nasm/releasebuilds/2.16.03/win64https://www.nasm.us/pub/nas…

Unity 之 Android 【獲取設備的序列號 (Serial Number)/Android_ID】功能的簡單封裝

Unity 之 Android 【獲取設備的序列號 (Serial Number)/Android_ID】功能的簡單封裝 目錄 Unity 之 Android 【獲取設備的序列號 (Serial Number)/Android_ID】功能的簡單封裝 一、簡單介紹 二、獲取設備的序列號 (Serial Number) 實現原理 1、Android 2、 Unity 三、注意…

九型人格介紹

協調型人格 作為“好好先生”的何炅是典型的協調型人格者,他總是將大家的利益放在第一位,很少顧及自己的感受;當他周圍的人產生沖突時,他總是力圖找到一個有利于雙方的解決方案;本著息事寧人的態度,他對利益的追逐和向往很低&…

gem5模擬器入門(一)——環境配置

什么是gem5? gem5是一個模塊化的離散事件驅動的計算機系統模擬器平臺。這意味著: GEM5 的組件可以輕松重新排列、參數化、擴展或更換,以滿足您的需求。它將時間的流逝模擬為一系列離散事件。它的預期用途是以各種方式模擬一個或多個計算機系…

掌握并發控制的“急剎車”藝術!

當一個線程運行時,另外一個線程可以直接通過interrupt方法對其設置中斷標志位。 判斷線程是否中斷的2個方法: // 判斷目標線程是否被中斷,不會清除中斷標記。 Thread.currentThread().isInterrupted() // 判斷目標線程是否被中斷,…

【職業教育培訓機構小程序】教培機構“招生+教學”有效解決方案

教培機構“招生教學”有效解決方案在數字化轉型的浪潮中,職業教育培訓機構面臨著提升教學效率、拓寬招生渠道、增強學員互動等多重挑戰。小程序作為一種新興的移動應用平臺,為解決這些痛點提供了有效途徑。 一、職業教育培訓機構小程序的核心功能 &…

Laravel 圖片添加水印

和這個配合使用 Laravel ThinkPhP 海報生成_laravel 制作海報-CSDN博客 代碼 //水印 $x_length $imageInfo[0]; $y_length $imageInfo[1];$color imagecolorallocatealpha($posterImage, 255, 255, 255, 70); // 增加透明度參數alpha$font_size 40; //字體大小 $angle …

HTML靜態網頁成品作業(HTML+CSS)——家鄉沅陵介紹網頁(1個頁面)

🎉不定期分享源碼,關注不丟失哦 文章目錄 一、作品介紹二、作品演示三、代碼目錄四、網站代碼HTML部分代碼 五、源碼獲取 一、作品介紹 🏷?本套采用HTMLCSS,未使用Javacsript代碼,共有1個頁面。 二、作品演示 三、代…

條款9:利用destructors避免泄露資源

對指針說拜拜。承認吧,你從未真正喜歡過它,對不? 好,你不需要對所有指針說拜拜,但是你真的得對那些用來操控局部性資源(local resources)的指針說莎唷娜拉了。 舉個例子,你正在為“小動物收養…

Flutter 中的 CircularProgressIndicator 小部件:全面指南

Flutter 中的 CircularProgressIndicator 小部件:全面指南 在 Flutter 應用開發中,加載指示器是提供用戶反饋的重要組成部分,特別是在需要等待數據加載的場景中。CircularProgressIndicator 是 Flutter 提供的一個表現圓形加載動畫的小部件。…

Python進階:探索Python標準庫和第三方庫

在前兩篇文章中,我們介紹了Python的基本語法和面向對象編程。在這篇文章中,我們將深入探索Python的標準庫以及一些常用的第三方庫。Python的強大之處不僅在于其簡潔的語法,還在于豐富的庫生態系統。通過使用這些庫,你可以更高效地完成各種任務,從文件操作到數據分析、網絡…

godot4.2 + GDextension c++在 vs code 中斷點調試配置

游戲開發中如果做不到自己編寫的代碼做斷點調試,無不是瞎子摸象,特別是C這么底層的語言。這2天開始在VS studio中折騰,一直折騰不出結果,幾次想要放棄GODOT。最終今天在VS code中搞定了這斷點調試C代碼。 在上一篇文章我已經做好了…

React hooks - useContext

useContext 用法使用以非侵入的方式使用 Context使用 useContext 重構 useReducer 案例 用法 實現多層組件的數據傳遞 在全局創建 Context 對象在父組件中使用 Context.Provider 提供數據在子組件中使用 useContext 使用數據 import React, { useContext } from react // 全局…