API系列一:REST和RESTful認識

序言

最近工做的項目一直使用API,就想趁這個機會,把API的知識點進行一次梳理和總結,順便提高一下本身對API全新的認識php

Web API 是ASP.NET平臺新加的一個特性,它能夠簡單快速地建立Web服務爲HTTP客戶端提供API。Web API 使用的基礎庫是和通常的MVC框架同樣的,但Web API並非MVC框架的一部分,微軟把Web API相關的類從 System.Web.Mvc 命名空間下提取了出來放在 System.Web.Http 命名空間下。這種理念是把 Web API 做爲ASP.NET 平臺的核心之一,以使Web API能使用在其餘的Web應用中,或做爲一個獨立的服務引擎。本文爲了更好的理解Web API,先帶你們瞭解一下 REST 和 RESTful Web APIhtml

理解REST和RESTful Web API

爲了更好的理解Web API,先帶你們瞭解一下 REST 和 RESTful Web API。如下內容大多來自維基百科web

關於REST及RESTful的概念,已有很多文章介紹,這裏整理幾篇我以爲不錯的參考:數據庫

  • 維基百科的定義: REST
  • 什麼是REST跟RESTful? REST理論的中文詳述,其中你能夠了解到WCF Restful屬於RPC 樣式的 Web 服務,ASP.NET Web API屬於RESTful Web 服務。
  • 深刻淺出REST InfoQ的專文介紹,文中甚至有Roy T. Fielding當年REST博士論文的中文翻譯連接。另外值得一提的,你們可能沒聽過Roy Fielding的大名,但若是得知他是HTTP規格的主要做者及Apache HTTP Server項目的發起人之一,應該不會有人懷疑他在Web技術領域的份量。

上面的文章建議你們認真的讀一下,這裏咱們簡要的介紹下REST 作入門介紹,理解整個 REST 能讓咱們在 ASP.NET Web API 的路上更順暢。api

REST(全名:Representational State Transfer),State Transfer 爲 "狀態傳輸" 或 "狀態轉移 ",Representational 中文有人翻譯爲"表徵"、"具象",合起來就是 "表徵狀態傳輸" 或 "具象狀態傳輸" 或 "表述性狀態轉移",不過,通常文章或技術文件都比較不會使用翻譯後的中文來撰寫,而是直接引用 REST 或 RESTful 來表明,由於 REST 一整個觀念,想要只用六個中文字來完整表達真有難度。是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格瀏覽器

REST 從資源的角度來觀察整個網絡,分佈在各處的資源由URI肯定,而客戶端的應用經過URI來獲取資源的表徵。得到這些表徵導致這些應用程序轉變了其狀態。隨着不斷獲取資源的表徵,客戶端應用不斷地在轉變着其狀態,所謂表徵狀態轉移(Representational State Transfer)。安全

目前使用Web服務的三種主流的方式是:遠程過程調用(RPC),面向服務架構(SOA)以及表徵性狀態轉移(REST),其中REST模式的Web服務與複雜的SOA和RPC對比來說顯的更加簡潔,愈來愈多的web服務開始採用REST風格設計和實現。服務器

須要注意的是,REST是設計風格而不是標準,但REST設計風格常基於使用HTTP,URI,和XML以及HTML這些現有的普遍流行的協議和標準。REST設計風格有以下要點:網絡

  • 資源是由URI來指定。
  • 對資源的操做包括獲取、建立、修改和刪除資源,這些操做正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
  • 經過操做資源的表現形式來操做資源。
  • 資源的表現形式則是XML或HTML,取決於讀者是機器仍是人,是消費web服務的客戶軟件仍是web瀏覽器。固然也能夠是任何其餘的格式,如JSON。

另外,使用REST須要知足一些要求,如客戶端和服務器結構、鏈接協議具備無狀態性、可以利用Cache機制增進性能等。架構

REST 自己是設計風格而不是標準。REST 談論一件很是重要的事,如何正確地使用 Web標準,例如,HTTP 和 URI。想要了解 REST 最好的方式就是思索與瞭解Web 及其工做方式。若是你設計的應用程序能符合 REST 原則 (REST principles),這些符合 REST 原則的 REST 服務可稱爲 "RESTful web service" 也稱 "RESTful Web API"。"-ful" 字尾強調它們的設計徹底符合 REST 論文裏的建議內容。

資源 RESOURCE

 REST 中的資源 (Resource) 表明整個網絡上的資源。網絡上提供了各式各樣的資源,而網絡上的資源由 URI (統一資源標識符,Uniform Resource Identifier) 來提供。 
回想,你如何連上個人 博客,你可能經過瀏覽器直接輸入  www.cnblogs.com/shanyou 此域名來到達首頁,也能用書籤或網絡上的連接,經點擊後來連上個人博客。而後,你想看這一篇名爲「REST 入門介紹」的文章,因此以你接下去點擊這文章的標題連結,接去下閱讀。咱們簡易瞭解一下整個流程:

  1. 經過URL ( http://www.cnblogs.com/shanyou ) , Client 向 http://www.cnblogs.com/shanyou 發出請求
  2. www.cnblogs.com/shanyou 收到請求,迴應首頁給 Client
  3. Client 又點擊 REST 文章連結  (假設是 http://www.cnblogs.com/shanyou/archive/2011/06/30/2095018.html) 向http://www.cnblogs.com/shanyou發出archive/2011/06/30/2095018.html  此篇文章的請求
  4. www.cnblogs.com/shanyou  收到請求,響應 REST 文章內容給 Client

Client 的經過 URI 來獲取資源的具體象徵 (Representational)。Client 取得這些具體象徵使這些應用程序轉變其狀態 (以 瀏覽器而言,取得 HTML、CSS、JavaScript … 來生成界面),隨着不斷取得資源的具體象徵, Client 端不斷地改變其狀態,這樣不斷的反覆 (iterations ) 過程就是所謂的 Representational State Transfer。

 

RESTful Web API(也稱爲RESTful Web服務)是一個使用HTTP並遵循REST原則的Web服務。它從如下請求資源的三個方面進行定義:

  • URI,好比:http://example.com/resources/。
  • Web服務接受與返回的互聯網媒體類型,好比:JSON,XML ,YAML 等。
  • Web服務在該資源上所支持的一系列請求方法(好比:POST,GET,PUT或DELETE)。

本文要講的ASP.NET Web API 就是RESTful Web API的一種。下表列出了在實現 RESTful Web API 時HTTP請求方法的典型用途:

不像基於SOAP的Web服務,RESTful Web服務並無「正式」的標準。這是由於REST是一種架構,而SOAP只是一個協議。雖然REST不是一個標準,但在實現RESTful Web服務時可使用其餘各類標準(好比HTTP,URL,XML,PNG等)。

使用 WEB 標準

上述是最接近平常的範例,這些行爲在 HTTP 規範中稱之爲 GET,也就是經過URL 來 GET 我想要的資源。另外一經常使用的例子是填寫表單,例如,登入表單,我想進行登入動做,就必須先發送帳號與密碼給某一資源,此資源會驗證你所傳送的數據是否正確,再進行後續動做。咱們發送信息給資源的行爲在 HTTP 規範中稱之爲 POST。 
 HTTP/1.1 RFC 2616第 5.1.1 Method 一節定義了八大類 HTTP 方法,除了咱們經常使用的 GET 與 POST 以外,在 REST 中經常使用的還有 PUT 與 DELETE。此 GET, POST, PUT, DELETE 正好能夠對應咱們 CRUD (Create, Read, Update, Delete) 四種數據操做。

HTTP Method 與 CURD 數據處理操做對應

HTTP方法

數據處理

說明

POST

Create

新增一個沒有id的資源

GET

Read

取得一個資源

PUT

Update

更新一個資源。或新增一個含 id 資源(若是 id 不存在)

DELETE

Delete

刪除一個資源

RESTFUL WEB SERVICE

RESTful Web Service (又稱 RESTful Web API) 是一個使用 HTTP 並符合 REST 原則的 Web 服務。咱們知道,經過 URL 能夠傳送 GET 請求,在 表單指定 method="GET|POST" 來送出請求。但咱們要處理 PUT 或 DELETE 的請求呢?經過 RESTful 咱們能夠簡單 URI 來定義資源並和 HTTP 方法配合使用。

Resource 與 HTTP 方法的對應

資源

資源說明

GET

PUT

POST

DELETE

http://www.cnblogs.com/Products/

Products是一組資源集合

列出 該組資源集合中每一個資源的詳細信息

更新 當前整組資源

新增 或附加一個新資源。該操做傳回新資源的URL

刪除 整組資源

http://www.cnblogs.com/Products/1

Products/1是單個資源

取得 指定的資源的詳細信息

更新 或新增指定的資源

新增 或附加一個新元素

刪除 指定的元素

以上表格有沒有很像咱們通常在對數據庫表格的操做順序,進入一個 Table 的數據首頁 (一般是列表),此頁面會有「新增、更新、刪除、詳細」等連結,你想進行什麼操做,就點那一個連結。 
在 RESTful 每一個資源有本身獨立的 URI, Client 從資源集合或單個資源開始進入,不論是資源集合或單個資源,咱們都能與 HTTP 方法配合使用,例如,GET 下載,PUT 更新,POST 新增,DELETE 刪除。

ASP.NET Web API 是一個框架(framework),能讓你在 .NET Framwork 之上架設 HTTP 服務 (HTTP Services)。ASP.NET Web API 是 .NET Framework 上構建 RESTful 應用程序的理想平臺。

什麼是REST:結束語

REST 描述了一個架構樣式的互聯繫統(如 Web 應用程序)。REST 約束條件做爲一個總體應用時,將生成一個簡單、可擴展、有效、安全、可靠的架構。因爲它簡便、輕量級以及經過 HTTP 直接傳輸數據的特性,RESTful Web 服務成爲基於 SOAP 服務的一個最有前途的替代方案。用於 web 服務和動態 Web 應用程序的多層架構能夠實現可重用性、簡單性、可擴展性和組件可響應性的清晰分離。Ajax 和 RESTful Web 服務本質上是互爲補充的。開發人員能夠輕鬆使用 Ajax 和 RESTful Web 服務一塊兒建立豐富的界面。

 

上面資料有參考

清清飛揚園友:http://www.cnblogs.com/joeblackzqq/archive/2011/06/16/2082841.html

Liam Wang 園友 : http://www.cnblogs.com/willick/p/3441432.html

張友善 園友:http://www.cnblogs.com/shanyou/archive/2012/05/12/2496959.html

該內容只是入門的參考,理解資料

 

  • 博主是利用讀書、參考、引用、抄襲、複製和粘貼等多種方式打形成本身的純鍍 24k 文章,請原諒博主成爲一個無恥的文檔搬運工!
  • 小弟剛邁入博客編寫,文中若有不對,歡迎用板磚扶正,但願給你有所幫助。
相關文章
相關標籤/搜索