REST 架構
REST 是個縮寫,不是休息架構的意思,而是 Representational State Transfer,較多的翻譯為 “表現層狀態轉換” 目的是方便不同軟體/程式在網路上互相傳遞資訊。
好處
好處很多,這邊列出最具代表的好處。
簡單性
:REST 架構風格採用了簡單的原則和約束,使其易於理解和實施。它使用 HTTP 協議中的標準方法(GET、POST、PUT、DELETE 等),使開發人員能夠快速上手。下面這張 wiki 的圖片就可以快速說明一切
獨立性
:REST 允許客戶端和伺服器在技術上獨立,它們之間的通信僅通過資源的表示(通常是 JSON 或 XML)進行。 客戶端只管 call API 就好,至於 API 背後使用什麼語言寫的,不用管 !!!
安全性
:RESTful API 可以通過標準的 HTTP 安全性措施來保護,如 HTTPS。這提供了數據傳輸的安全性和隱私保護。
易於測試和調試
:由於RESTful API 是無狀態(Stateless)的,可以更容易地測試和調試,因為每個請求都是獨立的。
GET、POST、PUT、DELETE 於網頁技術的使用
GET & POST html 表單就有支援,當然 Ajax request 也有支援
GET -> 對應 CRUD 中的 Read
1
2
3
<form action="https://example.com/resource" method="get">
<input type="submit" value="GET Resource">
</form>
POST -> 對應 CRUD 中的 Create
1
2
3
<form action="https://example.com/resource" method="post">
<input type="submit" value="POST Resource">
</form>
PUT -> 對應 CRUD 中的 Update
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<button onclick="putData()">PUT Resource</button>
<script>
function putData() {
fetch('https://example.com/resource', {
method: 'PUT',
body: JSON.stringify({ key: 'new-value' }),
headers: {
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data));
}
</script>
DELETE -> 對應 CRUD 中的 Delete
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<button onclick="deleteData()">DELETE Resource</button>
<script>
function deleteData() {
fetch('https://example.com/resource', {
method: 'DELETE'
})
.then(response => {
if (response.status === 204) {
console.log('Resource deleted successfully');
}
});
}
</script>
無狀態(Stateless)
這邊特別要提一下何謂無狀態(Stateless):每個客戶端請求(request)與伺服器之間都是獨立的,伺服器不會保留來自一個請求到下一個請求的任何信息,這就代表說,每個請求都要包含所有必要信息。 因此這就是 RESTful API 會很好做測試的原因。
等等! “每個請求都要包含所有必要信息”,那不就包含帳密等敏感資訊,這部分該怎麼增加安全性 ? 通常會使用身分驗證(Authentication)、OAuth 2.0、 HTTPS、SSL/TLS、CSRF..等來增加安全性。
後續有提到的話,會再增加上來。