Home FastAPI (3) REST 架構(中文)
Post
Cancel

FastAPI (3) REST 架構(中文)

REST 架構

REST 是個縮寫,不是休息架構的意思,而是 Representational State Transfer,較多的翻譯為 “表現層狀態轉換” 目的是方便不同軟體/程式在網路上互相傳遞資訊。

好處

好處很多,這邊列出最具代表的好處。

簡單性:REST 架構風格採用了簡單的原則和約束,使其易於理解和實施。它使用 HTTP 協議中的標準方法(GET、POST、PUT、DELETE 等),使開發人員能夠快速上手。下面這張 wiki 的圖片就可以快速說明一切

Desktop View

獨立性: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..等來增加安全性。

後續有提到的話,會再增加上來。

☝ツ☝

This post is licensed under CC BY 4.0 by the author.

👈 ツ 👍

Andorid & iOS 網頁變成 app 的開啟方式(中文)

FastAPI (3) REST Architecture(English)