iT邦幫忙

2023 iThome 鐵人賽

DAY 14
0
Software Development

Spring Boot 零基礎入門系列 第 14

Spring Boot 零基礎入門 (14) - Http 協議介紹

  • 分享至 

  • xImage
  •  

賀!此系列文榮獲 2023 iThome 鐵人賽《優選》獎項,正在規劃出書中,感謝大家的支持🙏,同名課程「Java 工程師必備!Spring Boot 零基礎入門」也已在 Hahow 平台上架

哈囉大家好,我是古古

前一篇文章有先簡單介紹了 Spring MVC 功能的用途是什麼,不過在我們開始介紹 Spring MVC 之前,會需要大家先對前後端溝通的協議有一些基本的認識

因此這篇文章,我們就會先來介紹前後端溝通最基礎的部分,也就是「Http 協議」,所以我們就開始吧!

什麼是 Http 協議?


Http 協議就是「負責去規定資料的傳輸格式,讓前端和後端能夠有效進行資料溝通」的一種規定,所以換句話說的話,只要前後端想要透過 Http 協議溝通,那就是必須得按照 Http 協議的規則來走

https://ithelp.ithome.com.tw/upload/images/20230928/20151036ErqAklRuN7.png

舉例來說,像是 Http 協議可能會規定,當前後端在溝通的時候,每一句話都要加上「您好」,所以前後端的溝通就會變成這樣:

  • 前端會說:「您好,我想要商品列表」
  • 接著後端會說:「您好,第一個是蘋果,第二個是橘子」

https://ithelp.ithome.com.tw/upload/images/20230928/201510360FLlqOuJLB.png

所以 Http 協議的用途,就是去「規範前後端溝通的格式」,讓大家照著 Http 協議定義的格式走,這樣就可以讓前後端溝通的格式變得更規範,進而提升溝通效率了

補充:除了 Http 協議之外,其實也是有其他的協議 (ex: WebSocket) 在定義前後端溝通的規則的,不過因為 Http 協議是前後端溝通使用上最廣泛的協議,因此此系列文只會介紹 Http 協議的相關細節,不過這邊就是讓大家先知道,其實除了 Http 協議之外,也是有其他協議可以使用的~

Http 協議的定義


大概了解了 Http 協議的概念之後,我們可以回頭來看一下 Http 協議的定義

Http 協議的目的,即是「規定資料的傳輸格式,讓前端和後端能夠有效的進行資料溝通」,因此前後端就必須要按照 Http 協議的規定,去傳輸資料給對方

在 Http 協議中,可以分為「Request (請求)」和「Response (回應)」兩部分,而一個 Http request 加上一個 Http response,就可以組合成一次完整的 Http 溝通

舉剛剛的前後端溝通的例子來說的話:

  • 當前端向後端說:「我想要商品列表」時,這個就是一個 Http request (也稱為 Http 請求)
  • 當後端回應前端說:「第一個是蘋果, 第二個是橘子」時,這個就是一個 Http response (也稱為 Http 回應)

而「一個 Http request + 一個 Http response」,就構成了一次完整的 Http 溝通,換句話說的話,就是前後端之間有來有往,這樣子就是一次完整的 Http 溝通了

https://ithelp.ithome.com.tw/upload/images/20230928/20151036PVO3D6i1Ee.png

當大家了解了 Http request 和 Http response 之間的運作邏輯之後,那麼接著我們就可以來詳細介紹,Http 協議中對於 request 和 response 的格式規範了

Http Request 的格式規範


在一個 Http request 裡面,可以分成四個部分,分別是:http method、url、request header 以及 request body

https://ithelp.ithome.com.tw/upload/images/20230928/20151036nTrneeiYUc.png

1. Http method

Http method 表示的是這個 Http 請求所使用的「請求方法」,他的值有好幾種可以選,像是常用的有 GET、POST、PUT、DELETE..等等,不同的請求方法會有不同的特性,在後續的文章中,我們會再對常見的兩個 http method:GET 和 POST,進行更完整的介紹

2. Url

Url 其實就是網站的網址,也就是會出現在瀏覽器上方網址列中的那一串文字

https://ithelp.ithome.com.tw/upload/images/20230928/20151036YqJpBznL5v.png

3. Request header

Request header 主要是放一些請求時的通用資訊,這部分相對比較進階,所以大家可以先略過沒關係

4. Request body

Request body 是放請求的參數,只有在使用 POST 或是 PUT 這類的請求方法時,才可以去使用 request body 去傳遞參數,這部分一樣是會在後續的文章中做比較詳細的介紹,目前大家只要先有個概念就可以了

Http Response 的格式規範


看完了 Http request 的格式之後,接著我們可以來看一下 Http response 的格式

在一個 Http response 裡面,可以分成三個部分,分別是:http status code、response header 以及 response body

https://ithelp.ithome.com.tw/upload/images/20230928/20151036IGkPFN6zbm.png

1. Http status code

Http status code 的中文可以翻譯為「Http 狀態碼」,用途是表達「這一次 Http 請求的結果為何」

譬如說在這個 status code 裡面,顯示的是「成功」的狀態碼的話,那就表示這一次 Http 的請求成功了,那如果這個 status code 是呈現「失敗」的狀態碼的話,那就表示這一次的 Http 請求失敗了

因此大家可以把這個 Http status code,想像成是一個 「快速確認」 此次請求是成功還是失敗的值,透過這個 Http status code,我們就可以快速判斷這一次 Http 請求到底是成功還是失敗,進而就可以去進行後續的判斷和操作了

有關 Http status code 中的常見狀態碼,一樣是會在後續的文章中詳細介紹

2. Response header

Response header 和上面的 Request header 類似,都是放一些通用的資訊,因為他也是屬於比較進階的部分,因此大家可以先略過

3. Response body

Response body 可以說是在 Http response 中最重要的部分,這裡面所放的,就是「後端要傳給前端的數據」

因此當前端收到了一個 Http response 時,如果此次請求是成功的話,前端就會去取得這個 Response body 中的數據,並且將這些數據結合前端的版面設計,最後就可以呈現完整的網頁給使用者看了

在 API Tester 中練習發起 Http request、查看 Http response


大概了解了 Http request 和 Http response 的格式之後,我們可以實際到 API Tester 中,來練習一下要如何發起一個 Http request

補充:在 Day 2 - 開發環境安裝(Mac 版)Day 3 - 開發環境安裝(Windows 版) 中,有分別針對不同系統安裝 Chrome 插件 Talend API Tester,如果想安裝的大家,可以回頭參考一下安裝流程

首先打開 Chrome 的插件 API Tester,會看到如下圖的介面,其中上方的部分是 Http request 的區域,而下方的部分是 Http response 的區域,因此到時候我們就可以透過這個介面,清楚的去知道當前的 Http request 的參數設定是什麼、並且 Http response 所回傳的內容又是什麼了

https://ithelp.ithome.com.tw/upload/images/20230929/20151036xSMY7AI8Ty.png

而在上方的 Http request 區塊中,每一個部分,就可以對應到剛剛所介紹的 Http request 格式

大家可以先在 http method 的部分選擇 GET,然後在 url 的部分填上下列的值 http://localhost:8080/test ,這樣就填好了一個最簡單的 Http request 了!

https://ithelp.ithome.com.tw/upload/images/20230929/20151036TUu7UBufWA.png

接著我們可以回到 Spring Boot 程式中,確保 MyController class 中的程式如下圖所呈現

https://ithelp.ithome.com.tw/upload/images/20230929/20151036YqWWvE2qET.png

@RestController
public class MyController {

    @RequestMapping("/test")
    public String test() {
        System.out.println("Hi!");
        return "Hello World";
    }
}

確認 MyController 中的程式沒問題之後,就可以運行起這個 Spring Boot 程式,而當看到右下角出現了「Started DemoApplication in 1.024 seconds」的話,就表示 Spring Boot 程式運行成功了

https://ithelp.ithome.com.tw/upload/images/20230929/20151036SgemgUHxVC.png

當 Spring Boot 程式運行成功之後,可以回到 API Tester 中,並且點擊右側的「Send」按鈕,這樣就可以去發起一個 Http request 了

https://ithelp.ithome.com.tw/upload/images/20230929/20151036KKlnom2gSy.png

當大家按完「Send」按鈕之後,理論上下面的 Response 區塊就會出現如下圖的介面,呈現了這一個 Http request 的 Http response 是什麼

https://ithelp.ithome.com.tw/upload/images/20230929/20151036lZMOD6NWt7.png

像是在這一次的 Http response 中,他的 http status code (http 狀態碼) 的值就是 200,而在 Http 協議的定義中,200 就是表示請求成功,因此我們也就可以透過這個 http status code,「快速的」 知道這一次的 Http 請求是成功的

而當 Http 請求是成功的話,後端就會將返回值放在 response body 裡面,供前端後續去存取,所以在這裡也可以看到,Spring Boot 程式就將返回值「Hello World」呈現在 response body 中

所以到這邊,就表示我們就成功的去發起一個 Http request,並且取得 Spring Boot 程式所返回的 Http response 了,可喜可賀!

補充:發起 Http request 的工具


除了這篇文章介紹的 API Tester 之外,其實也是有很多工具 (ex: Postman、curl),可以去發起一個 Http request 的

不過這些發起 Http request 的工具,其實他們的底層邏輯都是一樣的,都是去遵守了 Http 協議所規定的 request 和 response 的格式,因此才能夠正常的去發起一個 Http request

所以換句話說的話,只要我們好好的遵守 Http 協議所規定的 request 和 response 的格式,將來不管我們使用的是 API Tester、Postman 或是其他的工具,就都是可以達到一樣的效果的,差別只在他們提供的 UI 介面和一些進階的功能不一樣而已

這點還滿重要的,重點是「Http 協議」本身,而不是這個工具發明了什麼神奇的招數這樣

總結


這篇文章先介紹了什麼是 Http 協議,並且分別介紹了 Http request 和 Http response 的格式規範,讓大家對 Http 協議有更多的認識

那麼下一篇文章,我們就會來介紹 Spring MVC 中的常用註解 @RequestMapping,了解要如何透過 @RequestMapping,將 url 路徑對應到 Spring Boot 的程式中,那我們就下一篇文章見啦!

相關連結



上一篇
Spring Boot 零基礎入門 (13) - Spring MVC 簡介
下一篇
Spring Boot 零基礎入門 (15) - Url 路徑對應 - @RequestMapping
系列文
Spring Boot 零基礎入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言