【RESTful】前后端的通信方式 REST

前后端的通信方式 REST

  • 1.初識 REST
    • 1.1 什么是 REST
    • 1.2 REST 的特征
  • 2.HTTP 方法與 CRUD 動作映射
  • 3.實現 REST 風格的 CRUD

1.初識 REST

1.1 什么是 REST

REST 是軟件架構的規范體系結構,它將 資源的狀態 以適合客戶端的形式從服務器端發送到客戶端(或相反方向)。在 REST 中,通過 URL 進行資源定位,用 HTTP 動作(GETPOSTDELETEPUSH 等)描述操作,完成功能。

🚀 REST 即 表述性狀態傳遞(Representational State Transfer,簡稱 REST)是 Roy Fielding 博士在 2000 年他的博士論文中提出來的一種 軟件架構風格(Software Architecture Style)。它是一種針對網絡應用的設計和開發方式,可以降低開發的復雜性,提高系統的可伸縮性。

🚀 REST 密切相關的兩個名詞:資源狀態。可以說,資源 是 REST 系統的核心概念。所有的設計都會以資源為中心,包括如何對資源進行添加,更新,查找以及修改等。而資源本身則擁有一系列狀態。在每次對資源進行添加 ,刪除或修改的時候,資源就將從一個狀態轉移到另外一個狀態。

遵循 RESTful 風格,可以使開發的接口通用。以便調用者理解接口的作用。基于 REST 構建的 API 就是 RESTful(REST 風格)API。

各大機構提供的 API 基本都是 RESTful 風格的,這樣可以統一規范,減少溝通、學習和開發的成本。

1.2 REST 的特征

  • 客戶 — 服務器client-server):提供服務的服務器和使用服務的客戶端需要被隔離對待。
  • 無狀態stateless):服務器端不存儲客戶的請求中的信息,客戶的每一個請求必須包含服務器處理該請求所需的所有信息,所有的資源都可以通過 URI 定位,而且這個定位與其他資源無關,也不會因為其他資源的變化而變化。

Restful 是典型的基于 HTTP 的協議。HTTP 連接最顯著的特點是:客戶端發送的每次請求都需要服務器回送響應;在請求結束后,主動釋放連接。從建立連接到關閉連接的過程稱為 “一次連接”,前后的請求沒有必然的聯系,所以是無狀態的。

  • 可緩存cachable):服務器必須讓客戶知道請求是否可以被緩存。
  • 分層系統layered System) :服務器和客戶之間的通信必須被標準化。
  • 統一接口uniform interface):客戶和服務器之間通信的方法必須統一,RESTful 風格的數據元操作 CRUD(createreadupdatedelete)分別對應 HTTP 方法:GET 用來 獲取資源,POST 用來 新建資源,PUT 用來 更新資源,DELETE 用來 刪除資源,這樣就統一了數據操作的接口。
  • HTTP 狀態碼:狀態碼在 REST 中都有特定的意義:200201202204400401403500。比如,401 表示用戶身份認證失敗;403 表示驗證身份通過了,但資源沒有權限進行操作。
  • 支持按需代碼Code-On-Demand,可選):服務器可以提供一些代碼或腳本,并在客戶的運行環境中執行。

2.HTTP 方法與 CRUD 動作映射

RESTful 風格使用同一個 URL,通過約定不同的 HTTP 方法來實施不同的業務。

普通網頁的 CRUD 和 RESTful 風格的 CRUD 的區別,見表:

動作普通 CRUD 的 URL普通 CRUD 的 HTTP 方法Restful 的 URLRestful 的 CRUD 的 HTTP 方法
查詢Article/id=1GETArticle/{id}GET
添加Article?title=xxx&body=xxxGET / POSTArticlePOST
修改Article/update?id=xxxGETArticle/{id}PUT 或 PATCH
刪除Article/delete?id=xxxGETArticle/{id}DELETE

可以看出,RESTful 風格的 CRUD 比傳統的 CRUD 簡單明了,它通過 HTTP 方法來區分增加、修改、刪除和查詢。

3.實現 REST 風格的 CRUD

在 Spring Boot 中,如果要返回 JSON 數據,則只需要在控制器中用 @RestController 注解。 如果提交 HTTP 方法,則使用注解 @RequestMapping 來實現,它有以下兩個屬性:

  • Value:用來制定 URI。
  • Method:用來制定 HTTP 請求方法。

(1)獲取列表采用的是 GET 方式,返回 List。例如,下面代碼返回 Article 的 List。

@RequestMapping(value = "/", method = RequestMethod.GET)
public List<Article> getArticleList() {List<Article> list = new ArrayList<Article>(articleRepository.findAll());return list;
}

(2)增加內容(提交內容)采用的是 POST 方式,一般返回 String 類型或 int 類型的數據,見以下代碼:

@RequestMapping(value = "/", method = RequestMethod.POST)
public String add(Article article) {articleRepository.save(article);return "success";
}

(3)刪除內容,必須采用 DEIETE 方法。一般都是根據 id 主鍵進行刪除的。

@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
public String delete(@PathVariable("id") long id) {articleRepository.deleteByld(id);return "success";
}

(4)修改內容,則用 PUT 方法。

@RequestMapping(value = "/{id}", method = RequestMethod.PUT)
public String update(Article model) {articleRepository.save(model);return "success";
}

(5)查詢內容,和上面獲取列表的方法一樣,也是采用 GET 方法。

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public Article findArticle(@PathVariable("id") Integer id) {Article article = articleRepository.findByld(id);return article;
}

對于 RESTful 風格的增加、刪除、修改和查詢,可以編寫測試單元,也可以用 Postman 測試,分別用 GET、POST、PUT、DELETE 方法提交測試。雖然這樣實現了 RESTful 風格,但還有一個問題 —— 返回的數據并不統一,在實際生產環境中還需要進行改進,所以需要設計統一的 RESTful 風格的數據接口。

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

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

相關文章

小型簡易GIT服務器搭建和使用

搭建GIT服務器的文章有很多&#xff0c;多數在管理的時候都使用了gitosis作為管理工具&#xff0c;但是作為一個小團隊(人數少于50人)&#xff0c;我覺得完全可以使用公鑰驗證的方式&#xff0c;這樣會簡單不少&#xff0c;下面來看看簡易的搭建方法吧。 服務器版本:ubuntu 16…

Unix\Linux 執行shell報錯:“$‘\r‘: 未找到命令” 解決

linux執行腳本sh xxx.sh報錯&#xff1a;$xxx\r: 未找到命令 原因&#xff1a;shell腳本在Windows編寫導致的換行問題&#xff1a; Windows 的換行符號為 CRLF&#xff08;\r\n&#xff09;&#xff0c;而 Unix\Linux 為 LF&#xff08;\n&#xff09;。 縮寫全稱ASCII轉義說…

第二證券:ppi指數是什么,ppi指數下降對股市有什么影響?

PPI全稱Producer Price Index&#xff0c;PPI指數即“出產者價格指數”&#xff0c;反映的是一守時期內出產者購買中心產品和原材料價格的改動趨勢和改動程度。 了解ppi指數&#xff1a; 簡單了解便是&#xff0c;計算出出產者的本錢改動狀況&#xff0c;然后反映到價格上。 …

windows@windows設備之間遠程命令行控制方案@windows設備間使用OpenSSH

文章目錄 abstract為什么考慮命令行連接討論主題 powershell遠程控制使用PowerShell遠程管理前提條件&#xff1a;步驟&#xff1a;1. 啟用WinRM服務2. 配置信任主機3. 測試連接4. 創建遠程會話5. 運行遠程命令6. 關閉會話 例子小結 SSH方案基礎連接免密自動登錄修改配置文件在…

【自學網絡安全】:安全策略與用戶認證綜合實驗

實驗拓撲圖&#xff1a; 實驗任務&#xff1a; 1、DMZ區內的服務器&#xff0c;辦公區僅能在辦公時間內(9:00-18:00)可以訪問&#xff0c;生產區的設備全天可以訪問 2、生產區不允許訪問互聯網&#xff0c;辦公區和游客區允許訪問互聯網 3、辦公區設備10.0.2.10不允許訪問Dmz區…

新聞資訊整合平臺:一站式滿足企業信息需求

摘要&#xff1a; 面對信息爆炸的時代&#xff0c;企業如何在海量數據中快速獲取有價值資訊&#xff0c;成為提升競爭力的關鍵。本文將探討如何通過一站式新聞資訊整合平臺&#xff0c;實現企業信息需求的全面滿足&#xff0c;提升決策效率&#xff0c;同時介紹實用工具推薦&a…

Redis數據類型和數據隊列

一.Redis數據類型 參考資料&#xff1a;http://www.redis.cn/topics/data-types.html 相關命令參考: http://redisdoc.com/ Redis 是一種基于內存的開源數據結構存儲系統&#xff0c;支持多種數據類型&#xff0c;每種數據類型都有自己特定的操作命令。 String&#xff08;字…

Games101學習筆記 Lecture17 Materials and Appearances

Lecture17 Materials and Appearances 材質 BRDF一、Diffuse/Lambertian Material二、Glossy Material三、Ideal reflective/ refractive Material (BSDF)1.鏡面反射2.鏡面折射3.菲涅爾項 Fresnel 四、Microfacet BRDF 微表面五、Isotropic / Anisotropic Materials (BRDFs)An…

博客標題:C++中的繼承:構建面向對象的基石

目錄 ?編輯 引言 繼承的基本形式 示例1&#xff1a;基本繼承 繼承的類型 示例2&#xff1a;不同類型的繼承 多重繼承 示例3&#xff1a;多重繼承 繼承與多態性 示例4&#xff1a;繼承與多態 結論 結尾 引言 在面向對象編程&#xff08;OOP&#xff09;中&#xff…

【持續集成_03課_Linux部署Sonar+Gogs+Jenkins】

一、通過虛擬機搭建Linux環境-CnetOS 1、安裝virtualbox&#xff0c;和Vmware是一樣的&#xff0c;只是box更輕量級 1&#xff09;需要注意內存選擇&#xff0c;4G 2、啟動完成后&#xff0c;需要獲取服務器IP地址 命令 ip add 服務器IP地址 通過本地的工具&#xff0c;進…

新手教學系列——crontab 使用不當引發的服務器性能問題

起因及癥狀 最近,我們的一臺服務器隨著運行時間的增加,逐漸出現了壓力過大的問題。具體表現為數據庫連接數飆升至 4000+,Redis 頻繁超時,系統報錯文件打開數過多等。針對這些問題,我們逐一檢查了數據庫連接池、Redis 連接池以及系統的 ulimit 配置,但都未能找到問題的根…

第241題| 確定極限中參數問題 | 武忠祥老師每日一題

解題思路&#xff1a;確定極限中的參數的方法是求這個極限&#xff1b;求極限根據類型選方法。 形可以用到三種方法&#xff1a;洛必達&#xff0c;等價&#xff0c;泰勒。 先觀察題目&#xff0c;將看成一個整體&#xff0c;同時,并令,整理之后如下&#xff1a; 這里也要想辦…

mysql怎么調整緩沖區大小

MySQL中調整緩沖區大小是數據庫性能優化的重要一環。緩沖區大小直接影響了數據庫的讀寫性能和響應速度。以下是一些常見的MySQL緩沖區及其調整方法&#xff1a; 一、InnoDB緩沖池&#xff08;InnoDB Buffer Pool&#xff09; InnoDB緩沖池是InnoDB存儲引擎用來緩存表數據和索…

代碼隨想錄第7天 454 、 383 、15、18

代碼隨想錄第7天 454. 四數相加 II 思路就是先統計nums1和num2各個元素之和出現的次數&#xff0c;然后遍歷num3和nums4各個元素之和&#xff0c;看其相反數是否在map中&#xff0c;若在加上出現次數 class Solution { public: int fourSumCount(vector<int> &num…

nginx.conf配置文件

1、全局模塊 worker_processes 1; 工作進程數&#xff0c;一般設置成服務器內核數的2倍&#xff08;一般不超過8個&#xff0c;超過8個反而會降低性能&#xff0c;一般是4個&#xff0c;1-2個也可以&#xff09; 處理進程的過程必然涉及配置文件和展示頁面&#xff0c;也就是…

高斯過程的定義

高斯過程 1. 高斯過程的定義2. 協方差矩陣的構建3. 協方差矩陣的性質3.1. 計算挑戰3.2. 解決方法 1. 高斯過程的定義 高斯過程可以看作是對函數的分布&#xff0c;它假定任何有限數量的函數值的集合服從一個多元高斯分布。給定輸入數據點集合 { x 1 , x 2 , … , x n } \left…

2024.7.9作業

1、提示并輸入一個字符串&#xff0c;統計該字符串中字母、數字、空格以及其他字符的個數 #include <stdio.h> #include <string.h> int main(int argc,const char *argv[]) { char arr[30]{0}; int zm0,kg0,sz0,qt0; printf("請輸入字符串&…

OpenStack是一個開源的云計算平臺

OpenStack是一個開源的云計算平臺&#xff0c;由多個組件組成&#xff0c;這些組件協同工作&#xff0c;提供包括計算、網絡、存儲和身份服務在內的基礎設施即服務(IaaS)。OpenStack最初由NASA和Rackspace合作開發&#xff0c;目的是創建一個開放源代碼的云操作系統。 OpenSta…

智慧光伏一站式解決方案

光伏電站智慧化管理平臺&#xff0c;將現代先進的數字信息技術、通信技術、互聯網技術、云計算技術、大數據挖掘技術與光伏技術高度融合而形成。可以滿足光伏企業對電站的高發電量、低初始投資、低運維成本等需求&#xff0c;從開發到運維的25年生命周期內&#xff0c;實現高收…

使用clion刷leetcode

如何優雅的使用clion刷leetcode 安裝插件&#xff1a;LeetCode Editor) 插件配置&#xff1a; 這樣我們每打開一個項目&#xff0c;就會創建類似的文件 我們的項目結構&#xff1a; 我們在題解文件中導入頭文件myHeader.h并將新建的文件添加到cmakelists.txt文件&#xff0c;…