目錄
1.restful api
1.1.歷史
1.2.內(nèi)容
1.3.傳參
2.Spring Boot中的Restful Api
1.restful api
1.1.歷史
RESTful API(Representational State Transferful Application Programming Interface)是一種設(shè)計(jì)風(fēng)格,用于構(gòu)建基于網(wǎng)絡(luò)的應(yīng)用程序接口(API)。它基于一組原則和約定,旨在使不同的計(jì)算機(jī)系統(tǒng)能夠通過(guò) HTTP 協(xié)議相互通信和交換數(shù)據(jù)。
RESTful 架構(gòu)風(fēng)格的歷史可以追溯到 2000 年,由 Roy Fielding 在他的博士論文 "Architectural Styles and the Design of Network-based Software Architectures" 中首次提出。他在論文中描述了 REST(Representational State Transfer)的概念,并介紹了一組原則和約定,用于設(shè)計(jì)和構(gòu)建分布式網(wǎng)絡(luò)應(yīng)用程序。
以下是 RESTful 架構(gòu)風(fēng)格的主要?dú)v史發(fā)展階段:
-
博士論文(2000 年):Roy Fielding在他的博士論文中首次提出了 REST 的概念。他強(qiáng)調(diào)了分布式系統(tǒng)設(shè)計(jì)中資源的重要性,以及通過(guò)使用統(tǒng)一接口和狀態(tài)轉(zhuǎn)移的方式來(lái)實(shí)現(xiàn)系統(tǒng)的可伸縮性、性能和可擴(kuò)展性。
-
Web 2.0 時(shí)代(2000 年代中期):隨著 Web 的發(fā)展,REST 開始獲得更多關(guān)注。許多 Web 2.0 應(yīng)用程序采用了 RESTful 架構(gòu),使其能夠更有效地交換數(shù)據(jù)和與客戶端進(jìn)行通信。
-
移動(dòng)應(yīng)用的興起(2010 年代):隨著智能手機(jī)和移動(dòng)應(yīng)用的興起,RESTful API 成為連接移動(dòng)客戶端與后端服務(wù)的主要方式。許多社交媒體、電子商務(wù)和其他類型的應(yīng)用程序開始采用 RESTful 架構(gòu)。
-
微服務(wù)架構(gòu)(2010 年代后期至今):RESTful API 也在微服務(wù)架構(gòu)中得到廣泛應(yīng)用。微服務(wù)架構(gòu)通過(guò)將應(yīng)用程序拆分為小型、獨(dú)立的服務(wù)來(lái)提高可維護(hù)性和可伸縮性,而 RESTful API 則成為這些服務(wù)之間通信的一種標(biāo)準(zhǔn)方式。
1.2.內(nèi)容
RESTful API總結(jié)起來(lái)內(nèi)容如下:
-
資源和標(biāo)識(shí)符:在 RESTful API 中,每個(gè)資源都有一個(gè)唯一的標(biāo)識(shí)符(URI),用于唯一標(biāo)識(shí)該資源。資源可以是實(shí)際對(duì)象、數(shù)據(jù)、服務(wù)等。
-
統(tǒng)一接口:RESTful API 使用統(tǒng)一的 HTTP 方法(GET、POST、PUT、DELETE 等)來(lái)執(zhí)行操作,如獲取資源、創(chuàng)建資源、更新資源和刪除資源。
-
狀態(tài)無(wú)關(guān)性:RESTful API 是無(wú)狀態(tài)的,每個(gè)請(qǐng)求都應(yīng)該包含足夠的信息來(lái)理解和處理請(qǐng)求,而不需要維護(hù)會(huì)話狀態(tài)。
-
緩存:RESTful API 支持緩存,可以提高性能和減少網(wǎng)絡(luò)流量。
-
客戶端-服務(wù)器:RESTful API 將客戶端和服務(wù)器解耦,使它們可以獨(dú)立進(jìn)行開發(fā)和擴(kuò)展。
-
分層系統(tǒng):RESTful API 支持分層系統(tǒng)架構(gòu),其中每個(gè)層都可以獨(dú)立修改和優(yōu)化,從而提高了系統(tǒng)的靈活性和可伸縮性。
-
按需代碼:服務(wù)器可以在需要時(shí)將代碼傳送到客戶端,以實(shí)現(xiàn)功能的擴(kuò)展。
-
面向資源:RESTful API 設(shè)計(jì)應(yīng)該圍繞資源進(jìn)行,而不是圍繞操作進(jìn)行。
-
自描述消息:RESTful API 的請(qǐng)求和響應(yīng)消息應(yīng)該是自描述的,使開發(fā)者能夠理解其含義。
以上的所有內(nèi)容,其核心其實(shí)就一個(gè)就是第2點(diǎn),使用統(tǒng)一的 HTTP 方法(GET、POST、PUT、DELETE 等)來(lái)執(zhí)行操作,如獲取資源、創(chuàng)建資源、更新資源和刪除資源。
以對(duì)用戶的增刪改查為例,rest api總結(jié)起來(lái)就是:
HTTP方法 | URL | 功能 |
---|---|---|
GET | /user | 獲取用戶 |
POST | /user | 增加用戶 |
PUT | /user | 修改用戶 |
DELETE | /user | 刪除用戶 |
1.3.傳參
rest api規(guī)范中對(duì)傳參沒(méi)有強(qiáng)制規(guī)定,但是有一些工程實(shí)踐總結(jié)出來(lái)的優(yōu)秀經(jīng)驗(yàn),常用的傳參方式如下
-
URL 路徑參數(shù):將參數(shù)直接包含在 URL 路徑中。這通常用于標(biāo)識(shí)資源的唯一標(biāo)識(shí)符,如獲取特定用戶的信息。
示例:GET /users/{id}
-
查詢字符串參數(shù):將參數(shù)作為查詢字符串的一部分包含在 URL 中。這用于傳遞過(guò)濾條件、分頁(yè)信息等。
示例:GET /users?role=admin&page=1&limit=10
-
請(qǐng)求體參數(shù):將參數(shù)包含在請(qǐng)求體中,通常在創(chuàng)建或更新資源時(shí)使用。數(shù)據(jù)通常以 JSON 或 XML 格式發(fā)送。
示例:
-
POST /users,請(qǐng)求體:{"username": "john", "email": "john@example.com"}
-
PUT /users/{id},請(qǐng)求體:{"email": "newemail@example.com"}
-
2.Spring Boot中的Restful Api
Spring MVC中本身就自帶
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
這些注解可以輕松實(shí)現(xiàn)Restful api,唯一需要注意的就是傳參。
Spring Boot支持Restful Api將參數(shù)放在路徑里:
@GetMapping("/user/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
? ?// 根據(jù) id 查詢用戶信息并返回
}
如果參數(shù)太多,支持放在http報(bào)文的body里:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-641565.html
@PostMapping("/user")
public ResponseEntity<User> createUser(@RequestBody User user) {
? ?// 創(chuàng)建用戶并返回創(chuàng)建后的用戶信息
}
Rest Api規(guī)范里建議要給出規(guī)范的響應(yīng)碼,Spring Boot里提供了ResponseEntity 類來(lái)構(gòu)建響應(yīng),可以設(shè)置狀態(tài)碼、頭部信息和響應(yīng)體。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-641565.html
@GetMapping("/user/{id}")
public ResponseEntity<User> getUserById(@PathVariable Long id) {
? ?User user = userService.getUserById(id);
? ?if (user != null) {
? ? ? ?return ResponseEntity.ok(user);
? } else {
? ? ? ?return ResponseEntity.notFound().build();
? }
}
到了這里,關(guān)于【Spring Boot】詳解restful api的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!