哈囉大家好,我是古古。
在前面的文章中,我們有介紹了 Spring MVC 的 @RequestMapping
和 @RestController
的用法,所以我們現在已經可以接住前端傳過來的請求,並且也能夠回傳 JSON 格式的數據給前端了。
那麼這篇文章,我們就會回頭來探索 Http 協議中的其他部分,因此這篇文章我們就先來介紹一下,Http method 是什麼,以及常見的 Http method 有哪些。
在一個 Http reqeust 中,我們除了一定要填上 url 之外,另一個必填的資訊,就是 Http method。
而 Http method 所表示的,是這一次請求所使用的「請求方法」,他的值有好幾種可以選,像是 GET、POST、PUT、DELETE…等等,不同的請求方法,會有不同的特性。
而在這篇文章中,我們會來介紹最廣泛使用的兩個 Http method,也就是 GET 和 POST 的用法。
GET 是最常使用的 Http Method,大家可以把 GET 想像成是「明信片」的概念,所以換句話說,就是 「當你使用 GET 來請求時,你所傳遞的參數就會被別人看見」。
補充:前端在發起 Http request 時,也是可以「傳遞參數」給後端的,就像是 Java 中的方法一樣,方法和方法之間是可以傳遞參數的。在前面的文章中我們還沒介紹到「傳遞參數」的實作方式,從這篇文章開始就會介紹到這部分。
也因為當前端使用 GET 來請求時,他所傳遞的參數是完全公開、可以被大家所看見的,因此這就像是明信片一樣,你所寫的信件內容全部都會被大家所看見,所以才會說 GET 是明信片的概念。
以下面這張圖為例,當我們使用 GET 來請求時,如果我們想要傳遞參數的話,那就只能夠在 url 的最後面,寫上 id=123&name=Judy
的字串,表示我們要傳遞兩個參數, 一個是「id 為 123」,另一個則是「name 為 Judy」。
而在撰寫 GET 請求的參數時,有兩個重點要注意:
key=value
的格式來撰寫,像是 id=123
就是表示「id 的值為 123」的意思&
隔開,像是在上面的例子中,在 id=123
這組參數後面,就要先寫上一個 &
,後面才可以寫上下一組參數 name=Judy
另外這種「添加在 url 後面的參數們」,我們會稱呼這些參數為「query parameter」,因此在上圖中的 id=123&name=Judy
,他們就稱為是 query parameter。
所以總結來說,當前端使用 GET 來請求時,前端就必須將參數(query parameter)添加在 url 的最後面,同時也因為 url 是公開的、所有人都能看見,因此當前端使用 GET 來請求時,他所傳遞的參數就會被別人看見,所以 GET 也被稱為是「明信片」的概念。
了解了 GET 的用法之後,接下來我們也可以來看一下 POST 的用法和特性。
POST 作為也很常使用的 Http method 之一,他就和 GET 完全不一樣了!大家可以把 POST 想像成是「信封」的概念,因此「當你使用 POST 方法時,你所傳遞的參數就可以隱藏起來,不被別人看見」。
POST 之所以可以隱藏參數,就是因為在使用 POST 請求時,前端要將「參數放在 request body 中傳遞」,並且 request body 在傳遞的過程中會整個被封裝起來,不會被別人看見,因此放在裡面的參數就不會洩漏,所以才會說 POST 是信封的概念(因為請求的參數不會被別人看見)。
舉例來說,當我們使用 POST 來請求時,就可以使用 JSON 格式,將「id 的值為 123、name 的值為 Judy」的資訊,放在 request body 中來傳遞:
因此當前端使用 POST 來請求時,前端就可以將參數放在 request body 中來傳遞,又因為 request body 在傳遞的過程中是封裝起來、不會被別人看見的,因此當前端使用 POST 來請求時,他所傳遞的參數就可以隱藏起來,不被其他人看見,所以 POST 也被稱為是「信封」的概念。
補充:透過上面的例子也可以發現一個亮點,就是在 request body 中的參數,通常都是用 JSON 格式來撰寫的!所以學好 JSON 格式真的很重要啊!!他在使用上非常廣泛,在各個地方都可以看到 JSON 的身影。
如果不熟悉 JSON 用法的話,也可以回頭參考 Day 16 - 結構化的呈現數據 - JSON 格式介紹 的介紹。
所以總結上面的介紹的話,我們可以將 GET 和 POST 的特性整理成下面這張表格:
GET | POST | |
---|---|---|
概念 | 明信片 | 信封 |
用途 | 將參數添加在 url 後面傳遞 | 將參數放在 request body 中來傳遞(使用 JSON 格式) |
參數可見度 | 所有人都能看到參數的資訊,安全性較低 | 參數是不公開的,其他人看不見傳遞的參數,安全性較高 |
因此後續我們就可以在不同的時機點,使用較適合當前情況的請求方式了。
這篇文章我們介紹了 Http method 中常用的兩個 method:GET 和 POST,並且也介紹了他們在傳遞參數之間的差別。
在了解了 GET 和 POST 傳遞參數的差別之後,接著下一篇文章,我們就會回到 Spring Boot 上,來介紹要如何在 Spring Boot 中,去接住前端傳遞過來的參數,那我們就下一篇文章見啦!
補充:本文是擷取自我開設的線上課程 Java 工程師必備!Spring Boot 零基礎入門 的內容,如果你想了解更多的 Spring Boot 的用法,歡迎參考課程簡介 (輸入折扣碼「HH202504KU」即可享 85 折優惠)。