【Web API 02】什麼是 REST、RESTful 以及 RESTful Web API
主題: |
【Web API 02】什麼是 REST、RESTful 以及 RESTful Web API |
文章簡介: |
說明 REST、RESTful 以及 Web API 。 |
作者: |
江崑成(Vito) |
版本/產出日期: |
V1.0/2016.11.01 |
1. 前言
在撰寫 Web API 前,我們先稍微瞭解一下 Web API 與 REST 到底指的是什麼!
2. 環境準備
• Visual Studio 2015
• .Net Framework 4.6
3. REST & RESTful
REST 是英文 (Representational State Transfer) 的簡稱,是 Roy Thomas Fielding 博士於 2000 年在他的博士論文中提出來的一種軟體架構的開發的方法。
目前在三種主流的 Web 服務實現方案中,因為 REST模式與複雜的 SOAP 和 XML-RPC 相比更加簡潔並且更加輕量,所以很適合用在行動裝置,如 Pad 及 Mobile Phone 上的應用程式。
REST 是一種設計風格而不是標準。
3.1 REST 原則(由 wiki 截錄)
• 客戶-伺服器(Client-Server)
通信只能由客戶端單方面發起,表現為請求-響應的形式。
• 無狀態(Stateless)
通信的會話狀態(Session State)應該全部由客戶端負責維護。
• 緩存(Cache)
響應內容可以在通信鏈的某處被緩存,以改善網絡效率。
• 統一接口(Uniform Interface)
通信鏈的組件之間通過統一的接口相互通信,以提高交互的可見性。
• 分層系統(Layered System)
通過限制組件的行為(即,每個組件只能「看到」與其交互的緊鄰層),將架構分解為若干等級的層。
• 按需代碼(Code-On-Demand,可選)
支持通過下載並執行一些代碼(例如Java Applet、Flash或JavaScript),對客戶端的功能進行擴展。
3.2 REST Resource
在 REST 中的資源 (Resource) 代表整個網路上的資源。網路上提供了各式各樣的資源,而網路上的資源由 URI (統一資源標識符, Uniform Resource Identifier) 來提供。
客戶端的應用通過 URI 來獲取資源的具體象徵,獲得這些象徵致使這些應用程式轉變了其狀態,隨著不斷獲取資源的象徵,客戶端應用不斷地在轉變著其狀態,這樣不斷反覆的過程就是所謂的表徵狀態轉移 (Representational State Transfer)。
3.3 RESTful
美麗 (Beauty) 的事物可以稱為 Beautiful;設計為 REST 的系統就可以稱為 RESTful。
RESTful 特色
• 所有的 API 都是以 Resource 的形式存在,是直觀簡短的資源網址,如 http://www.sample/products/1728
• 接受或返回的網際網路媒體類型(MIME-Type),最常使用的是 JSON 格式,也可以回傳 XML、PNG、TXT…等格式。
• 服務在資源上支援透過一系列 HTTP 標準的動作 (GET、POST、_PUT、DELETE) 請求來達到對資料的操作。
3.4 實例
取得所有 Product
依 Product Id 取得 Product
新增 Product
依 Product Id 更新 Product
4. Web API
在瞭解 REST 以及 RESTful 後,再來看看 Web API,主要就是基於 HTTP 的網路服務,若設計符合 REST 原則,則可以稱為 RESTful API。
而 Web API 預設就支援 REST 這樣設計的風格,所以我們可以很輕易的建置 RESTful 服務。
簡而言之,就是可以對廣大的用戶端 (Mobile、Web、Windows、WPF Client…等),提供 HTTP 網路服務的架構。
4.1 Web API 特色
• 支援透過 HTTP 動詞 (GET、POST、_PUT、DELETE) 表示的 CRUD 操作。
• 請求的回覆可以透過 HTTP Status Code 來表達不同的含義,並且用戶端可以通過 Accept Header 來與服務協商。
• 預設支援 XML 與 JSON 兩種資料格式的輸出,並且可以擴充增加其他格式。
• 內建支援 OData 。
• 可以接受或產生非物件的內容,如 images、PDF Files 等。
• 支援 Self-Host 或 IIS Host。
• 支援 ASP.NET MVC 的特性,如 Routing、Controller、Action Result、Filter、Attribute、Model Binder、IOC Container、Dependency Injection。能夠使用 Cache 機制,減少伺服器負載並加快反應的速度。
4.2 優點
• 支援 ASP.NET 整合驗證。
• 提高 Server Scalability 的能力。
• 支援快取,可改善反應時間以及 Server 的負載能力。
• 在 HTTP 之上不需依存其他機制,同時提高了 Client 端的擴充性。
• 不需要 Resource Discovery 機制,以降低程式耦合性。
• 支援新的內容格式不需要丟掉舊的,如 XML 及現行前端常用的 JSON。
• 集中商業邏輯程式,以避免過度分散的邏輯程式,以提高可維護性。
(過度分散邏輯程式)
(集中商業邏輯程式)
5. 參考來源
• What is Web API and why to use it ?
• ASP.NET MVC 4 Web API 開發 ( 全攻略 ) 上