WebAPI REST RESTful

【Web API 02】什麼是 REST、RESTful 以及 RESTful Web API

江崑成 2016/11/01 11:54:39
27946







主題

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 AppletFlashJavaScript),對客戶端的功能進行擴展。


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 服務。


MSDN 定義


簡而言之,就是可以對廣大的用戶端 (MobileWebWindowsWPF 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. 參考來源

維基百科 REST

What is Web API and why to use it ?

ASP.NET MVC 4 Web API 開發 ( 全攻略 )

簡明 RESTful API 設計要點

淺談 REST 軟體架構風格 (Part.I) - 從了解 REST 到設計 RESTful

Web API 强势入门指南

江崑成