iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 25
0

要搞懂什麼是RESTful API,首先要了解構成HTTP傳輸的client-server流程有哪些元素。
HTTP可以視為一種pull protocol,也就是指TCP連線是由想要接收檔案的主機所建立。
溝通(client-server間的資訊傳輸)往往都是由client端開始,傳送HTTP request給server,
然後server就會傳回一些response訊息給client端,這些訊息是一些可再被電腦翻譯成動作、圖片、影像等等的訊息。

request和response中有什麼?

所有的HTTP request都包含一個message header,message body則可有可無,
https://ithelp.ithome.com.tw/upload/images/20191010/20120024Z530VLxpBA.png
header中的第一行是request line,request line包含request verb(或稱作method)、URI(uniform resources identifier)以及HTTP version number。
https://ithelp.ithome.com.tw/upload/images/20191010/20120024wu35FH68ZT.png
接下來是具選擇性(可有可無)的request header,裡面包含一些可用來描述request中某些性質的參數。
request header由成雙成對的name和value組成,例如Content-Type、origin等。
在body中,client可以加入任何想和header一起傳送給server的資訊,例如form data。

HTTP 協定中,有哪些 request method(verb)?

最常見的就是以下這五種:
GET:獲取資源
POST:新增資源
PUT/PATCH:修改資源。PATCH是對PUT方法的補充,用來對已知資源進行局部更新
DELETE:刪除資源
此外還有HEAD, OPTIONS, TRACE, CONNECT

HTTP 協定中的payload和overhead指的是什麼?

payload指的是具有意義、有效的資料,放在body和URL裡參數也算是payload
而描述這些有意義的資料的資料,稱作metadata。
在HTTP協定下,傳輸資料都會有一定的overhead,因為必須有metadata去描述傳遞的有效資料。
用網路購物來比喻,payload就是我們要買的商品,而overhead則是運費。
如果今天運費大於我們買的商品的價格,我們可能就會考慮不要透過網路購物,因為不划算。
同樣的,在網路上傳輸資料,若資料量不大且資料內容不是機敏資訊,用HTTP可能會造成overload太大。

進入正題,什麼是RESTful api開發?

REST是representational state transfer的縮寫-
Resource:資源
Representational:表現形式,如JSON,XML等
State Transfer:狀態變化。可透過上述的HTTP動詞們來呼叫
RESTful的目的在於規範一種統一的格式,能夠讓開發者從URL path終究能一目了然傳遞資料之間的關係以及這隻api的動作是什麼。
它僅是一種開發API 的風格,並沒有強制開發一定得遵照RESTful,然而因其架構簡潔,有許多優點,因此為非常常見的一種API開發風格。
一個符合RESTful風格的interface,必須符合以下幾個原則:

  1. Client-server:透過將使用者界面問題與資料存儲問題分開,RESTful提高了使用者界面在多個平台上的可移植性,並透過簡化server元件來提高彈性。

  2. Stateless: 每個request都是獨立的,不會互相影響,從client端到server的每個request都必須包含該request所需的所有資訊,且不能利用server上存儲的任何內容。如此一來,session state就能完全保留在client端上。

  3. Cacheable:如果能將response保存起來,供以後類似的request重複使用,以減少回應時間與網路頻寬的消耗,增進效能,則該請求方法就是可快取的。快取限制要求對request的response中的資料被標記為可快取或不可快取。如果response是可快取的,則client端的快取將會給予response資料重新用於以後的等效請求的權限。

  4. Uniform interface:統一接口,透過將通用的軟體工程原理應用於元件接口,來簡化整個系統架構,並提高互動的可見度。統一的接口需要多個體系結構約束來限制元件的行為。REST由四個接口約束定義:

    1. 資源標識
    2. 透過表述操縱資源
    3. 自我描述的訊息
    4. 以超媒體作為應用程序狀態的引擎
  5. Layered system:分層的系統樣式可以透過限制元件的行為來使體系結構由層次結構層組成,每個組件都無法『 看到 』與他們互動的immediate layer背後的運作。

假如開發一支商品的web api,不按照RESTful風格的話,可能會長這樣:

獲得商品資料:GET /getItem/itemNumber
新增商品資料 :POST /createItem
更新商品資料 :POST /updateItem/itemNumber
刪除商品資料 :POST /deleteItem/itemNumber

而按照RESTful API 開發的話,則會寫成這樣:

獲取商品資料: /GET/items/itemNumber
新增商品資料: /POST/items
更新商品資料:/PATCH/items/itemNumber
刪除商品資料: /DELETE/items/itemNumber

參考資料:
https://restfulapi.net/
https://progressbar.tw/posts/53


上一篇
Day 24 實做猜數字遊戲(四):排行榜
下一篇
Day 26 Laravel 5.8:安裝與簡介
系列文
後端基礎PHP+Mysql & Laravel 30日養成計畫36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言