圖片來源: https://itznihal.medium.com/api-rest-api-and-restful-api-7767d9997854
參考資料如下:
- ChatGPT : https://chat.openai.com/
- https://hackmd.io/@monkenWu/Sk9Q5VoV4/https%3A%2F%2Fhackmd.io%2F%40gen6UjQISdy0QDN62cYPYQ%2FHJh9zOE7V?type=book
API 是什麼?
當我們談論API(應用程式編程界面)時,實際上在討論一種使不同軟體應用程式能夠互相通信和互動的機制。API遵循特定的規則和協議,使不同軟體系統能夠交換資訊、執行操作,而無需了解對方的內部運作細節。API是現代軟體開發中不可或缺的一部分,它使開發人員能夠輕鬆地訪問和使用其他軟體、服務或函式庫的功能。
*由ChatGPT潤稿
RESTful 是什麼?
RESTful(Representational State Transfer)。
它基於一系列原則和約定,確保API具有可伸縮性、簡單性、可理解性和可靠性。
RESTful API使用HTTP協議進行通信,將資源表示為唯一的URL,使用HTTP方法(如GET、POST、PUT、DELETE等)執行各種操作,資源的表示通常以通用的數據格式(最常見的是JSON或XML)進行傳輸。
RESTful設計風格的一些特點,這些特點有助於更深入了解它的運作方式:
- 資源表示:每個資源都有唯一的URL,可以使用HTTP方法對其進行各種操作。
- 無狀態性:RESTful通信是無狀態的,每個請求都必須包含所有必要的資訊,服務器不保留客戶端狀態資訊。
- 使用HTTP方法:HTTP方法(如GET、POST、PUT、DELETE)執行不同的操作,包括創建、讀取、更新和刪除(CRUD)等操作。
- 支援多種數據格式:RESTful API通常支援多種數據格式,最常見的是JSON,簡化了數據交換。
- 自描述性:RESTful API提供足夠的信息,使客戶端能夠理解如何使用API,無需深入了解API細節。
總之,API是軟體開發的關鍵,RESTful是一種重要的API設計風格,使用HTTP協議和設計原則創建可伸縮且易於理解的API。這些概念的理解對於軟體開發至關重要。
Was this response better or worse?BetterWorseSame
*由ChatGPT潤稿
RESTful API 請求資源的方法
需要包含的元件為:
- 唯一資源識別符: 伺服器通常使用統一的 URL 來執行資源識別。
- 方法:通常用 HTTP 來實作,因此需要告訴 Server 用什麼樣的方法操作
- GET:獲得資源
- POST:新增資源
- PUT:修改資源(若原本無資料則新增)
- PATCH:修改資源(只修改部分資源)
- DELETE:刪除資源
- HTTP 標頭:Client 與 Server 之間的中繼資料,當中包含所需參數(路徑參數、Cookie 參數等)
當我們在使用URL對特定資源請求動作時,首先需要明確我們的意圖。
這就好比在日常生活中,當你想要對某個物品,比如一個杯子,進行操作,但又需要協助時,你必須清晰地表達你希望對這個杯子進行的操作,以使他人能夠理解你的意圖並協助你完成任務,例如「拿杯子」或「丟杯子」。
在網際網路上也是如此,只不過這裡我們使用的是電腦可理解的語言,例如“GET”這個URL或”DELETE”這個URL。
動作 | 物品 | |
日常生活動作 | 拿、丟 | 杯子 |
網際網路( 與你的電腦溝通) | GET, DELETE | URL |
RESTful API 的路由語義化設計
RESTful API的路由語義化設計是一種設計原則。
旨在使API的路由(或端點)具有清晰的、易於理解的語義,以便開發人員和用戶能夠更容易地理解和使用API。
這種設計風格的主要目標是提高API的可讀性、可維護性和可用性。
以下是RESTfuZl API的路由語義化設計的一些重要特點:
- 使用清晰的URL結構:URL應該具有語義,能夠反映API端點的目的。例如,如果你設計一個部落格應用的API,則可以使用像
/posts
來表示所有部落格文章,而/posts/{id}
則用於單獨一篇文章。
- 使用HTTP動詞:HTTP方法(GET、POST、PUT、DELETE等)應該與API端點的操作相關聯。例如,使用GET方法來檢索資源,使用POST方法來創建資源,使用PUT方法來更新資源,使用DELETE方法來刪除資源。
- 使用複數名詞:對於表示多個資源的端點,應該使用複數名詞,例如
/users
表示所有用戶,而不是/user
。
- 使用子資源:如果需要表示資源之間的關係,可以使用子資源路由。例如,
/posts/{post_id}/comments
表示一篇文章的所有評論。 - 使用選擇性的篩選器和參數:允許客戶端使用選擇性的篩選器和參數來自訂請求,以便獲取特定子集的資源。例如,
/products?category=electronics
可以用於檢索特定類別的產品。 - 使用HTTP狀態碼:使用適當的HTTP狀態碼來指示請求的結果,例如200表示成功,404表示資源不存在,201表示創建成功等。
- 提供詳細的API文檔:除了清晰的路由設計,還應該提供詳細的API文檔,以幫助開發人員理解如何使用API,包括端點的語義和支持的請求參數。