[ASP.NET] Web API 2 New Future
在Build 2013中揭露了Web API 2,對於使用Web API 的開發者來說一定會想知道Web API 2多了什麼東西,本篇筆者就參考Build 2013 ASP.NET Web API 2 – Web Services for Websites, Modern Apps, and Mobile Apps課程內容資料,稍微做個筆記順便分享給大家。
Web API 是什麼以及能做什麼,針對Web API 可能初次接觸的開發者會認為它不就是一個Web Service嗎,甚至認為它就是用來取代WCF的,事實上要說它是一個Web上的服務(Service)也是對,只不過Web API 有個重要的特性,那就是它是透過Http protocol 所提供的一個服務,所以用Http Service來稱呼Web API 或許更適合,所以若說它是用來取代WCF那就錯囉(WCF可不是只有單純的Http protocol service而已),而Web API 能做什麼? 透過以下這張圖相信大家就能了解了
(取自:Build 2013 - ASP.NET Web API 2 – Web Services for Websites, Modern Apps, and Mobile Apps)
那麼要如何取得Web API 2 ,您可以安裝Visual Studio 2013 Preview,或是透過NuGet安裝(http://nuget.org/packages/Microsoft.AspNet.WebApi),目前是支援在 .Net 4.5版本以上,
Web Site 專案建立Web API 2(使用Visual Studio 2013 Preview)
(1)在web site 專案加入新項目/選擇Web API Controller(v2)
(2) 專案內會自動加入相關Web API 所需參考的dll檔案
Asp.net Web應用程式建立Web API 2(使用Visual Studio 2013 Preview)
(1) 在專案範本選擇Web API
(2)同樣的,在專案內會自動加入相關Web API 所需參考的dll檔案
(3) 建立完成您會發現在Controllers目錄中,會預設建立了一個名為ValuesController的Web API
ASP.NET MVC 透過scaffold建立Web API 範例程式碼
(1) Controllers 目錄右鍵 / 選擇支架(scaffold,中文翻譯為支架 XD)
(2) 選擇Web API 控制器 ( VS2013 Preview翻譯為Web API 5控制項,從NuGet的版號來看的確是WebAPI 5.0,但目前的暫用名稱是Web API (V2),有點容易混亂 XD)
(3) 接著為您的Web API取個名字即可,要注意必須為Controller結尾
(4) 若您是使用Entity Framework,可以直接選擇使用Entity Framework 架構的Web API來產生Sample Code
(5) 此時您要給的除了Web API的名字,還必須指定Entity Framework 架構中的model 類別及資料內容類別
Web API 2新特點 -Attribute routing
在Web API 1的時候,路由樣式的定義很重要,決定如何Mapping到我們的Web API 方法,有些時候光是定義路由就是一件很傷腦筋的事情,到了Web API 2,它允許我們可以利用屬性的方式直接在Web API 方法上指定路由,要使用這個機制只須在WebApiConfig中註冊config.MapHttpAttributeRoutes()方法即可,而不須定義任何的路由樣版。
在Web API 方法中則必須在方法前以屬性方法指定路由,例如
另外也可以使用預設值的路由指定,例如當未指定empno時,則預設值為傳回員編999的員工,若有指定則傳回指定的員工
上述都是在Web API 方法上以屬性方法指定路由,事實上我們也可以RoutePrefix(string)方式為特定Web API 指定路由,例如有二個版本的customer webapi ,透過RoutePrefix(string)方式分別指定特定路由
Web API 2新特點 –Unit Testing Web API
透過單元測試專案也可以做Web API的單元測試,三個步驟
(1)Create your controller
//Create your controller
ValuesController controller = new ValuesController();
(2)Set properties as needed (Request, Configuration, etc)
(取自:Build 2013 - ASP.NET Web API 2 – Web Services for Websites, Modern Apps, and Mobile Apps)
(取自:Build 2013 - ASP.NET Web API 2 – Web Services for Websites, Modern Apps, and Mobile Apps)
有時候我們可能會要Web API 方法回傳一些複雜型別等,此時可以IHttpActionResult來包裝回傳結果
public IHttpActionResult Post(WebApplication4.Models.EmployeeInfo empinfo)
{
//do some thing ....
//return result
return Content(HttpStatusCode.Created, empinfo);
}
Web API 2新特點 –整合OWIN(Open Web Interface for .NET)
OWIN ,發展.Net Web Servers與Web Application間通用標準的Web Interface
Run your Web APIs on any OWIN compliant host ,這部份基本就是期望Web API 可以部署運行於任何支援通用標準Web Interface的端點上。
Web API 2新特點 –OData: $select, $expand, $batch
支援OData是在VS2012 Update 2時開始,Web API 2則擴大支援$select, $expand, $batch
Web API 2新特點 –Web API security (CORS, OAuth 2.0)
支援夾戴tokens
(取自:Build 2013 - ASP.NET Web API 2 – Web Services for Websites, Modern Apps, and Mobile Apps)
public class Startup
{
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use OAuth 2.0 bearer tokens to authenticate users
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
}
(取自:Build 2013 - ASP.NET Web API 2 – Web Services for Websites, Modern Apps, and Mobile Apps)
支援Authorization Server的類型
(1)Host your own
Simple authz server in preview Single Page Application template code
Authz server support in OWIN middleware (future,未來預計支援)
(2) Use an existing one
Windows Azure Active Directory
Active Directory Federation Services in Window Server 2012 R2
看來最為人所擔心的Web API Security 方面,在Web API 2中有了一些應對措施。
總結:
(1)Web API 2 增加了利用屬性指定路由的便利性,使得Web API在設計上更方便。
(2)Web API也可以很簡單的在單元測試專案上進行測試。
(3)擴充了OData的技援。
(4)在安全性上支援了夾戴tokens及支援Authorization Server。
Ref :
ASP.NET Web API 2 – Web Services for Websites, Modern Apps, and Mobile Apps
By No.18