RESTful API:@RequestParam與@PathVariable實戰對比

@RequestParam vs @PathVariable 在刪除和查找操作中的使用差異

在項目實戰中,選擇使用 @RequestParam 還是 @PathVariable 來接收ID參數,通常基于以下幾個考慮因素:

1. RESTful API 設計原則

查找操作使用 @PathVariable

@GetMapping("/depts/{id}")
public Result findDept(@PathVariable Integer id) {// 根據ID查找部門
}
  • 符合RESTful原則:GET請求用于獲取資源,URL格式應為 /資源名/{資源ID}
  • 語義清晰/depts/123 明確表示"獲取ID為123的部門"
  • 緩存友好:URL路徑作為完整資源標識符,更適合瀏覽器和CDN緩存

刪除操作使用 @RequestParam

@DeleteMapping("/depts")
public Result deleteDept(@RequestParam Integer id) {// 根據ID刪除部門
}
  • 歷史慣例:早期REST實踐有時對刪除操作使用查詢參數
  • 批量操作考慮:使用查詢參數更易于擴展為批量刪除(如/depts?id=1,2,3
  • 安全考慮:某些框架對DELETE請求的URL長度限制較嚴格,查詢參數更靈活

2. 實際項目中的常見考量

安全性

  • 刪除操作更敏感:使用@RequestParam可以將ID放在請求體中而不是URL中,避免被瀏覽器歷史記錄、日志等輕易記錄
  • CSRF防護:某些安全框架對不同類型的參數提取有不同處理方式

前端調用便利性

  • 查找操作:前端通常直接拼接URL,@PathVariable方式更直觀
  • 刪除操作:前端可能使用HTTP庫發送請求,@RequestParam方式在代碼中更明確

API一致性

很多項目會保持一致性,全部使用@PathVariable

// 一致性更好的做法
@GetMapping("/depts/{id}")
public Result findDept(@PathVariable Integer id) { /* ... */ }@DeleteMapping("/depts/{id}")
public Result deleteDept(@PathVariable Integer id) { /* ... */ }

3. 現代最佳實踐

目前更普遍接受的做法是統一使用@PathVariable,因為:

  1. 更符合RESTful設計原則
  2. URL結構更清晰易讀
  3. 與HTTP方法語義更匹配(DELETE /resource/{id})
  4. 被大多數API設計指南推薦

4. 示例對比

使用 @PathVariable (推薦)

@RestController
@RequestMapping("/depts")
public class DeptController {@GetMapping("/{id}")public Result findDept(@PathVariable Integer id) {// 查找部門}@DeleteMapping("/{id}")public Result deleteDept(@PathVariable Integer id) {// 刪除部門}
}

請求示例:

  • 查找:GET /depts/123
  • 刪除:DELETE /depts/123

使用 @RequestParam (較少見)

@RestController
@RequestMapping("/depts")
public class DeptController {@GetMappingpublic Result findDept(@RequestParam Integer id) {// 查找部門}@DeleteMappingpublic Result deleteDept(@RequestParam Integer id) {// 刪除部門}
}

請求示例:

  • 查找:GET /depts?id=123
  • 刪除:DELETE /depts?id=123

5. 結論

在項目實戰中,根據ID刪除部門使用@RequestParam而查找使用@PathVariable的情況,可能是由于:

  1. 歷史遺留設計:項目初期設計選擇,后續未統一
  2. 特定框架限制:某些舊框架對DELETE方法的支持限制
  3. 團隊約定:特定團隊的開發規范
  4. 安全考慮:避免敏感操作ID出現在URL中

然而,現代API設計更推薦統一使用@PathVariable,因為它更符合RESTful原則,提供更清晰、一致的API接口。如果項目中存在這種不一致,建議逐步重構為統一風格。

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

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

相關文章

劇本殺小程序系統開發:開啟沉浸式社交娛樂新紀元

在當今數字化浪潮席卷的時代,社交娛樂方式正經歷著前所未有的變革。劇本殺,這一融合了角色扮演、推理懸疑與社交互動的線下娛樂項目,近年來迅速風靡全國,成為年輕人熱衷的社交新寵。而隨著移動互聯網的蓬勃發展,劇本殺…

中線安防保護器,也叫終端電氣綜合治理保護設備為現代生活筑起安全防線

中線安防保護器(Neutral Line Protection Device,簡稱NLPD)是一種專門用于監測和保護電力系統中性線的安全裝置。中線安防保護器的基本原理為:通過電流檢測環節采集系統中性線上過電流信息, 經控制器快速計算并提取各次諧波電流的…

Spring Cloud Alibaba快速入門02-Nacos配置中心(下)

文章目錄前言配置中心 - 數據隔離示例1.先創建命名空間2.創建配置3.克隆配置4.動態切換環境5.yml多文檔模式spring.profiles.activedevspring.profiles.activetest總結前言 上一章簡單了解了Nacos配置中心的基本用法,這一章將開始Nacos配置中心的實戰案例。 配置中…

基于結構光相移法的三維重建

基于結構光相移法的三維重建程序 1. 介紹 結構光相移法是一種常用的三維重建技術,通過投射條紋圖案并捕捉其變形來計算物體的三維形狀。相移法通過多次投射不同相位的條紋圖案,利用相位信息來提取物體表面的深度信息。 2. MATLAB實現 2.1 生成條紋圖案 首…

機器學習10——降維與度量學習(K近鄰、多維縮放、主成分分析)

上一章:機器學習09——聚類 下一章:機器學習11——特征選擇與稀疏學習 機器學習實戰項目:【從 0 到 1 落地】機器學習實操項目目錄:覆蓋入門到進階,大學生就業 / 競賽必備 文章目錄一、k近鄰學習(kNN&#…

Js 圖片加載完成 與 圖片緩存加載的區別

這兩個有什么區別// 圖片加載完成后淡入$img.on(load, function () {$img.css(opacity, 1);});// 處理圖片緩存情況if ($img[0].complete) {$img.css(opacity, 1);}要理解這兩段代碼的區別,需要先明確它們的核心作用場景和執行時機差異—— 本質是解決 “圖片加載完…

國產化PDF處理控件Spire.PDF教程:如何在 Java 中通過模板生成 PDF

在企業級應用開發中,生成 PDF 文檔是一項非常常見的需求。無論是發票、報告、合同,還是其他業務文檔,開發人員通常都需要一種高效、穩定的方式來創建 PDF。與其逐行繪制 PDF 內容,不如直接利用 模板 ——常見的模板形式包括 HTML …

Spring Cloud Gateway WebFlux現cvss10分高危漏洞,可導致環境屬性篡改

漏洞概述Spring官方披露了Spring Cloud Gateway Server WebFlux組件中存在一個高危漏洞(編號CVE-2025-41243),該漏洞在特定配置下允許攻擊者篡改Spring環境屬性。該漏洞已獲得CVSS 10.0的最高嚴重性評級。根據安全公告,該漏洞被描…

嵌入式 SQLite 數據庫開發筆記

嵌入式 SQLite 數據庫開發入門筆記在嵌入式開發中,數據存儲與管理是不可或缺的環節。對于資源有限的系統,輕量級數據庫 SQLite 是一個非常理想的選擇。它無需獨立服務進程,直接嵌入到應用中即可使用,既能滿足數據持久化需求&#…

Spark面試題及詳細答案100道(71-80)-- 配置與部署

《前后端面試題》專欄集合了前后端各個知識模塊的面試題,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

Redis 面試

1、主從集群1、構建主從集群單節點Redis的并發能力是有上限的,要進一步提高Redis的并發能力,就需要搭建主從集群,實現讀寫分離。主寫從讀,主可以讀也可以寫,從只能讀利用docker-compose文件來構建主從集群:…

如何使用PostgreSQL數據庫進行數據挖掘與預測分析

如何使用PostgreSQL數據庫進行數據挖掘與預測分析 關鍵詞:PostgreSQL,數據挖掘,預測分析,數據庫,機器學習 摘要:本文旨在深入探討如何利用PostgreSQL數據庫進行數據挖掘與預測分析。首先介紹了使用PostgreSQL進行此類操作的背景信息,包括目的、預期讀者、文檔結構等。接…

ZooKeeper vs Redis:分布式鎖的實現與選型指南

一、Redis 分布式鎖:追求極致的性能 Redis 分布式鎖基于內存操作,其核心思想是在內存中設置一個唯一的鍵值對來表示鎖的持有。 1. 基礎實現(SETNX Lua) 最簡單的實現是使用 SETNX(SET if Not eXists)命令&…

vue基于Springboot框架的考研咨詢平臺系統實現

目錄前言-本系統介紹已開發項目效果實現截圖開發技術詳細介紹核心代碼參考示例1.建立用戶稀疏矩陣,用于用戶相似度計算【相似度矩陣】2.計算目標用戶與其他用戶的相似度系統測試總結源碼獲取詳細視頻演示或者查看其他版本:文章底部獲取博主聯系方式&…

蘋果用戶速更新!macOS存嚴重漏洞,用戶隱私數據面臨泄露風險

漏洞概況近日,macOS系統發現一個CVSS評分高達 9.8 的高危漏洞,該漏洞可能允許應用程序繞過系統保護機制,非法訪問受保護的用戶數據。該漏洞編號為 CVE-2025-24204,目前已有概念驗證(PoC)代碼公開。漏洞影響…

海盜王64位dx9客戶端修改篇之五

在海盜王3.0客戶都升級64位dx9版本的過程中,因為特效的問題,被卡殼了很久。 開始是精靈草的粒子效果、白銀城的煙囪煙霧效果、篝火的效果、陽光透射效果、海浪效果等,修了很長的時間,才找到竅門弄好。 然后是精靈效果、角色陰影。…

Linux學習——管理網絡安全(二十一)

一、管理服務器防火墻(firewalld)RHEL 默認使用 firewalld 作為防火墻管理工具,它通過 “區域(zone)” 和 “服務(service)” 的概念簡化規則配置,支持動態更新規則而無需重啟服務。…

leetcode-python-1941檢查是否所有字符出現次數相同

題目: 給你一個字符串 s ,如果 s 是一個 好 字符串,請你返回 true ,否則請返回 false 。 如果 s 中出現過的 所有 字符的出現次數 相同 ,那么我們稱字符串 s 是 好 字符串。 示例 1: 輸入:s “…

Snort的介紹

當然可以。以下是對 Snort 的全面介紹,涵蓋其定義、核心功能、三種運行模式、工作原理、規則系統以及應用場景等內容。 Snort 網絡入侵檢測系統(NIDS)詳解 一、Snort 簡介 Snort 是一款開源的、輕量級但功能強大的 網絡入侵檢測與防御系統&…

滴滴二面準備(一)

結合你的簡歷內容和技術面試問題,以下是一個結構化的回答建議,突出你的技術深度和項目經驗:2. 項目與實習經歷 得物低代碼落地頁編輯器(核心項目) 背景:解決軟廣落地頁開發周期長、迭代慢問題。技術方案&am…