国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

POST請求和GET請求如何傳遞和接收解析參數

開發 前端
接口參數應該怎么傳遞是每個項目應該面對的問題,這跟編程語言無關,今天來總結一波常用的接口參數傳遞方式。

[[345069]]

 1. 前言

接口參數應該怎么傳遞是每個項目應該面對的問題,這跟編程語言無關,今天來總結一波常用的接口參數傳遞方式。

2. GET 請求

GET 請求一般用來向服務器請求獲取數據??傮w來說目前有兩種傳參風格類型。

多參數拼接

這是我們最常見的傳遞方式,它一般傳參方式如下:

  1. GET /api/v1/user?name=felord.cn&age=18 HTTP/1.1 
  2. Host: localhost:8080 

規則為:參數和 URI 之間用問號?隔開, 參數鍵值用等號=連接,然后參數之間用連接符&拼接起來,如樣例中的name=felord.cn&age=18。在 Spring MVC 中這種參數可以被對象接收:

  1. @GetMapping("/user"
  2. public Rest<?> urlEncode(User params) { 
  3.     // params.name = felord.cn 
  4.     // params.age = 18 
  5.     return RestBody.okData(params); 

通過HttpServletRequest#getParameter(String key)也獲取上述方式攜帶的參數,但是一般這種方式建議在 Servlet Filter 過濾器使用,而不建議在接口中使用。Spring MVC 攔截器獲取參數的底層也是該方式實現的。但是我也發現很多人在接口中使用此不合理的方式。

另外 URL 的長度是有限制的,如果 GET 請求包含了過于復雜的參數組合,說明業務設計是有問題的。

路徑標識參數

還有一種方式就是路徑參數,這種參數是期望獲取數據的標識,一般為數據的唯一標識或者分頁參數。例如查詢標識為1的用戶:

  1. GET /api/v1/user/1 HTTP/1.1 
  2. Host: localhost:8080 

查詢第1頁(每頁10條)的用戶:

  1. GET /api/v1/users/1/10 HTTP/1.1 
  2. Host: localhost:8080 

在 Spring MVC 中這種參數需要通過@PathVariable來處理:

  1. @GetMapping("/user/{userId}"
  2. public Rest<?> urlEncode(@PathVariable("userId") String userId) { 
  3.     return RestBody.okData(userId); 

DELETE 請求也推薦使用路徑參數

3. POST/PUT 請求

GET 請求是從服務端獲取數據的,而 POST 請求則是向服務端發送數據。很多不清楚它們之間區別的同學會混用它們。我見過使用 GET 請求修改數據的,也見過使用 POST 請求來查詢結果的。雖然它們可以完成期望的工作但是它們之間還是有很大的差別的,這里不得不重復一下:

  • GET 請求可以直接在瀏覽器直接請求當然也會保留在瀏覽器歷史記錄里,而 POST 不可以。
  • GET 請求是天然冪等性的,而 POST 不是。
  • GET 請求會被瀏覽器主動緩存,而 POST 不會,除非手動設置。
  • GET 請求只能進行 URI 編碼,而 POST 支持多種編碼方式。
  • 對參數的數據類型,GET 只接受 ASCII 字符,而 POST 沒有限制。
  • GET 比 POST 更不安全,因為參數直接暴露在 URL 上,所以不能用來傳遞敏感信息。
  • GET 參數通過 URL 傳遞,而且是有長度限制的,POST 放在請求體中,沒有長度限制。

GET 請求會把請求頭和 DATA 一并發送出去,然后服務器響應;而對于 POST 請求會先發送請求頭告訴服務器請求的編碼方式等等,然后服務器響應 100 continue 后客戶端再把編碼后的 DATA 發送給服務器,由服務器作出響應。另外如果不使用 HTTPS,POST 請求也無法保證數據的安全傳輸。

表單提交

POST 請求最長使用的場景是表單提交,比如登錄:

  1. <form action="/login" method="POST"
  2.     First name: <input type="text" name="username"><br> 
  3.     Last name: <input type="password" name="password"><br> 
  4.   <input type="submit" value="登錄"
  5. </form> 

這種方式是 POST 的默認方式,Content-Type為application/x-www-form-urlencoded。樣例如下:

  1. POST /login HTTP/1.1 
  2. Host: localhost:8080 
  3. Content-Type: application/x-www-form-urlencoded 
  4.  
  5. username=felord.cn&password=felord.cn 

參數的組織方式參考 GET 請求,但是不是放在 URL 中而是放在請求體中,另外必須顯式聲明Content-Type為application/x-www-form-urlencoded。Spring MVC 中我們可以直接使用對象來接收:

  1. @PostMapping("/login"
  2. public Rest<?> doLogin(LoginDTO params) { 
  3.     // params.username = felord.cn 
  4.     // params.password = felord.cn 
  5.     return RestBody.okData(params); 

上面的登錄也可以使用multipart/form-data方式來請求:

  1. POST /login HTTP/1.1 
  2. Host: localhost:8080 
  3. Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW 
  4.  
  5. ----WebKitFormBoundary7MA4YWxkTrZu0gW 
  6. Content-Disposition: form-data; name="username" 
  7.  
  8. felord.cn 
  9. ----WebKitFormBoundary7MA4YWxkTrZu0gW 
  10. Content-Disposition: form-data; name="password" 
  11.  
  12. felord.cn 
  13. ----WebKitFormBoundary7MA4YWxkTrZu0gW 

multipart/form-data將表單中的每個input轉為了一個由boundary分割的小格式,沒有轉碼,直接將 UTF-8 字節拼接到請求體中,在本地有多少字節實際就發送多少字節,極大提高了效率,適合傳輸長字節,通常我們用來上傳文件等大字節。例如我們將路徑C:/Users/felord/Desktop/spring-security.pdf文件以myFile為標識名上傳到服務器:

  1. POST /foo/upload HTTP/1.1 
  2. Host: localhost:8080 
  3. Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW 
  4.  
  5. ----WebKitFormBoundary7MA4YWxkTrZu0gW 
  6. Content-Disposition: form-data; name="myFile"; filename="/C:/Users/felord/Desktop/spring-security.pdf" 
  7. Content-Type: application/pdf 
  8.  
  9. (data) 
  10. ----WebKitFormBoundary7MA4YWxkTrZu0gW 

對應的 Spring MVC 接口為:

  1. @PostMapping("/upload"
  2.  public Rest<?> urlEncode(@RequestPart("myFile") MultipartFile file) { 
  3.      String originalFilename = file.getOriginalFilename(); 
  4.      return RestBody.okData(originalFilename); 
  5.  } 

請注意 Spring MVC 文件大小默認是10485760bytes。

Ajax POST 請求

目前大部分都是前后端分離了,所以除了上傳之外的 POST 請求更多建議將數據使用JSON的形式提交給服務器。當我們需要新增一個name為felord、age為18的User時建議這么做:

  1. POST /user/add HTTP/1.1 
  2. Host: localhost:8080 
  3. Content-Type: application/json 
  4.  
  5.     "name""felord"
  6.     "age": 18 

將參數封裝為JSON并放入請求體提交給后端。

  1. @PostMapping("/user/add"
  2. public Rest<?> add(@RequestBody User user) { 
  3.     return RestBody.okData(user); 

4. 總結

本文的目的希望在于明確 GET 和 POST 的使用場景和傳參方式,來幫助你正確使用它們,避免混亂的方式帶來的參數傳遞和解析問題。好了今天就到這里,多多關注:碼農小胖哥,獲取更多編程干貨。

 本文轉載自微信公眾號「碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯系碼農小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2023-08-07 09:25:06

GETPOSTHTTP請求

2015-10-27 11:06:51

PHPGETPOST

2015-08-06 13:33:22

PHPGETPOST

2009-07-02 15:36:18

JSP參數傳遞get post方法

2023-07-28 14:32:33

QtPOST請求

2020-09-24 10:09:01

GETPOST前端

2021-02-09 21:49:51

Python參數Get

2014-08-13 10:20:59

HttpURLConn

2014-08-15 13:11:03

HttpURLConn

2019-08-08 16:00:08

HTTPGETPOST

2021-12-13 07:50:14

cURL響應時間

2010-09-17 10:50:35

sip請求

2025-02-06 08:09:20

POSTGET數據

2011-07-28 18:25:27

Cocoa 異步請求 libxml2

2024-07-15 00:00:00

POST瀏覽器網絡

2022-12-19 07:28:53

Kubernetes資源請求限制

2022-07-12 17:03:43

鴻蒙網絡請求庫

2021-04-26 10:47:54

AJAXDjango前端

2011-06-08 11:02:14

GetPost

2024-01-07 16:46:19

FiberHTTPWeb
點贊
收藏

51CTO技術棧公眾號

一本色道久久综合一区| 欧美精品一二区| 精品亚洲成a人片在线观看| 亚洲精品免费看| 中午字幕在线观看| 欧美亚洲国产怡红院影院| 2024最新电影免费在线观看| 精品无人区太爽高潮在线播放| 日韩一区二区三区免费| 欧美激情高清视频| 国产一区二区精品久| 成人欧美一区二区三区视频| 母乳一区在线观看| 99热都是精品| 中文字幕欧美一区| 风间由美一区| 亚洲人精选亚洲人成在线| 91精品短视频| 5566中文字幕一区二区| 亚洲欧美卡通另类91av| 男人天堂a在线| 亚洲欧美色图小说| 国产精品无码2021在线观看| 亚洲国产精品久久久久秋霞蜜臀 | 看亚洲a级一级毛片| 国产精品久久综合av爱欲tv| 国产欧美一级| 国产a视频免费观看| 色哟哟日韩精品| 中文字幕日本一区二区| 成人欧美一区二区三区在线| 国产麻豆午夜三级精品| 黄页视频在线观看| 亚洲一区二区久久| 日韩久久综合| 大西瓜av在线| 欧美亚洲综合另类| 成人福利免费在线观看| 日本不卡在线播放| 樱花草国产18久久久久| 理论片午夜视频在线观看| 国产精品第100页| 成人黄色网址在线观看| 999国产在线视频| 欧美一级免费视频| 国产精品性做久久久久久| 在线免费视频你懂得| 色999日韩欧美国产| 韩日视频一区| 色视频网站在线观看| 精品无人区太爽高潮在线播放| 欧美日韩一二| 狠狠爱免费视频| 欧美精品一区二区三区一线天视频| 精品国产一级毛片| 茄子视频成人免费观看| 亚洲国产欧美精品| 欧美日本在线| 婷婷丁香六月天| 欧美日韩电影在线观看| 狠狠色丁香婷综合久久| 91精品专区| 国产日韩在线视频| 中文字幕一区二区三区四区不卡 | 亚洲第一会所| 欧美日韩国产综合在线| 一区二区在线观看视频在线观看| 国产精品亚洲成在人线| 水蜜桃一区二区三区| 日韩欧美精品在线观看| 亚洲精品国模| 日本美女高潮视频| 日韩在线欧美在线国产在线| 秋霞国产午夜精品免费视频| 色网站在线看| 114国产精品久久免费观看| 一区二区三区 在线观看视频| 日韩欧美另类中文字幕| 真人抽搐一进一出视频| 亚洲美女激情视频| 久久精品国产99久久6| 免费黄网在线观看| 国产伦理一区二区三区| 精品国产91久久久| 不卡一区综合视频| 能在线观看av网站| 欧美野外猛男的大粗鳮| 久久精品一区蜜桃臀影院| 免费日韩成人| 噜噜噜久久亚洲精品国产品麻豆| 亚洲欧洲在线观看| 国产精品一区免费在线观看| 久久青草伊人| 中文字幕第一页亚洲| 亚洲福利视频久久| 美女视频第一区二区三区免费观看网站 | 亚洲aⅴ日韩av电影在线观看 | 最新97超碰在线| 国产精品免费观看高清| 欧美日韩国产小视频在线观看| 中文字幕一区二区三区乱码图片| 偷拍自拍在线视频| 成人午夜电影在线播放| 欧美老肥妇做.爰bbww| 国产精品久久久久久久免费软件 | 500福利第一精品导航| 国产精品69久久| 亚洲高清中文字幕| 99精品视频在线观看播放| 中文字幕伊人| 99re视频在线| 91精品国产综合久久久久| 久久久久欧美精品| www.com.cn成人| avav在线看| 浅井舞香一区二区| 亚洲成人在线免费| 红桃视频欧美| 美女精品视频| 99在线观看视频免费| 久久综合亚洲社区| 日韩毛片精品高清免费| 亚洲深深色噜噜狠狠爱网站| 国产在线观看av| 精品成在人线av无码免费看| 欧美大胆在线视频| 亚洲第一搞黄网站| 久久综合伊人| 国产成人久久精品一区二区三区| 国产视频青青| 国产日韩在线一区二区三区| 精品久久免费看| 久久亚洲精品小早川怜子| 国产在线观看91一区二区三区| 婷婷在线视频| 久久亚洲国产成人精品无码区| 午夜精品蜜臀一区二区三区免费| 精品日韩美女的视频高清| 久久午夜精品一区二区| 在线视频成人| 伊大人久久香线焦宗合一75大| 欧美国产一区二区在线| 色播久久人人爽人人爽人人片视av| 国产精品热久久久久夜色精品三区| 国产精品久久久久9999赢消| 超碰99在线| 污视频网站免费看| 一区二区三区四区五区精品| 国内精品久久久久伊人av| 欧美亚洲自拍偷拍| 91啪九色porn原创视频在线观看| 99国产精品一区二区| 成人福利av| 在线播放evaelfie极品| 亚洲精品国产精品国自产观看 | 精品国产精品国产偷麻豆| 51xtv成人影院| 色综合97天天综合网| 久久久久久国产精品一区| 欧美大成色www永久网站婷| 91成人免费在线视频| va亚洲va日韩不卡在线观看| 一区二区在线| 蜜桃精品一区二区三区| 黄色免费网站在线观看| 99热com| 水蜜桃一区二区| 国产精品精品国产| 亚洲美女黄色片| 日本电影亚洲天堂一区| 99久精品国产| 国产深夜精品| 国内亚洲精品| 亚洲ww精品| 先锋影音在线资源站91| 伊人发布在线| 蜜桃传媒一区二区三区| 久久久www免费人成黑人精品| 欧美高清不卡在线| 精品国产亚洲一区二区三区在线观看| 亚洲美女免费视频| 国产精品一二一区| 在线综合欧美| 日韩a一区二区| 精品国产一区二区三区2021| 欧美性猛片xxxxx免费中国| 污视频在线看操| 免费成人看片| 人妻无码一区二区三区四区| 久久综合久久久| 91欧美精品午夜性色福利在线| 色综合天天狠天天透天天伊人 | 影视一区二区三区| 麻豆系列在线观看| 黄页网站免费在线观看| 久久精品国产精品亚洲色婷婷| 免费精品视频一区二区三区| 91久久中文字幕| 国产精品久久久久免费a∨| 久久久伊人欧美|