至於什麼是RESTful ,我們要REST說起
REST(英文:Representational State Transfer,又稱具象狀態傳輸 or 具象狀態轉化)是Roy Thomas Fielding博士於2000年在他的博士論文[1] 中提出來的一種全球資訊網軟體架構風格,目的是便於不同軟體/程序在網絡(例如網際網路)中互相傳遞信息。
具象狀態傳輸 轉化?? 不禁冒出黑人問號
Representational State Transfer 我們可以拆開來解釋
Representational (表現)
可以理解為資源 例如JSON 格式 XML格式 HTML格式 圖檔PNG JPG
URL只是個實體 代表資源的位置 至於跟URL為什麼有關係下面會提到
State Transfer(狀態轉化)
Server跟Client互動的一個過程 勢必會有數據的變化
這時候我們網頁Client 就會透過HTTP協定的四種操作:GET(查詢) POST(新建或更新) PUT(更新) DELETE(刪除) 資源
這時候又回到我們提到RESTful
對我來說符合以下原則就可以算是RESTful
1. URL指的是資源(Resources) 我們開發WEB API 盡量別拿動詞的英文拿來做URL的命名
就如我所說的他是資源
例如
1帳戶轉帳給2帳戶 500元 以下就是錯誤的URL
POST /accounts/1/transfer/500/to/2
正確是應該把動詞transfer改為名詞transaction
POST /transaction HTTP/1.1
Host: 127.0.0.1
from=1&to=2&amount=500.00
把動詞的部分留給HTTP
2.客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現“表現層狀態轉化”。
以上理解轉載於 阮一峰的网络日志 再由我的自己簡化
_____________________________________________________________________________
ASP.NET Web API
說了這麼多 可以開始了吧 ??
至少你要知道你要用什麼嘛 對吧
我們新建個空白專案吧 記得把我們要用的Web API 勾選
右鍵新增Controller吧 然後選擇我們的Web ApI 空白的選項
眼尖的人會發現 我在原本Controllers多新增了一個資料夾叫api
我把我所要用的api controller統一放在這跟MVC的controller做區隔
我們新增了個 Product的Web Controller
我們就來試看看Get 資料吧
我這邊建了一個Food 塞個假資料然後return 這個假資料
public class ProductController : ApiController { //定義Model 這只是範例 一般會按照架構設計統一擺放位置 不會放這 public class product { public string name { get; set; } public int quantity { get; set; } } [HttpGet] public List<product> Food() { var model = new List(); model.Add(new product { name = "食物A", quantity = 2 }); model.Add(new product { name = "食物B", quantity = 5 }); model.Add(new product { name = "食物C", quantity = 6 }); return model; } }
跑起來會像這樣它會回傳個xml格式的資料
可以看到我們的url 就是我們WebApiConfig設定路徑
這邊我多新增了個{action} 這是我之前常會犯的錯誤
導致他會不知道要處理controller 哪一個action
但是我比較習慣處理json格式
寶哥這裡有個統一回傳josn格式方法
http://blog.miniasp.com/post/2012/10/12/ASPNET-Web-API-Force-return-JSON-format-instead-of-XML-for-Google-Chrome-Firefox-Safari.aspx
在我們的Global.asax 新增 就統一會回傳json格式了
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
總結
是不是不難當然這中間如果架構越來越大的話你就要開始規劃你資料的商業邏輯處理
跟整體程式的 還有防範 AjaxAntiForgeryToken CSRF的問題
架構可以參考文章:
AjaxAntiForgeryToken CSRF :
沒有留言:
張貼留言