ASP.NET WebAPI2第001天_從一個最乾淨的專案進行Web API專案建置與開發_Rest跟SOAP比較
在比較Rest及SOAP前
先介紹SOA 全稱為 Service Oriented Architecture(服務導向架構)
提倡將不同應用程式的業務功能封裝成「服務」並Host起來,通常以接口和契約的形式暴露並提供給外界應用訪問(通過資料交換),達到不同系統可重用的目的。
主要用於解決技術不通用的問題,SOA可針對各廠商、產品與技術提供獨立介面供彼此存取只要有共通格式。
Web API 其實跟WCF、Web Service(.asmx)
是類似概念(不顯示畫面的網頁,著重後端業務及資料存取處理)
較常見運用是for 異質系統(不同程式語言)之間資料交換溝通、或是共用介面調用的使用。
藉此來達到不同作業系統、終端(手機、電腦、平板)的可重複使用的公用接口。
(例:即便你是Linux系統也可以對Windows系統 MS SQL資料做存取動作)
Web Service (Web API ,WCF,WebService .asmx )跟WebSite最大差異就在於對應的請求終端不同
WebSite面對的是人(User),而Web Servie面對的可能是另一台主機(其他終端)上的應用程式
因此Web Service 著重點不在UI呈現!!!!!!!
Web Service 跟 Web API 還有一個差異在於
Web API 是偏於端點對端點在進行發收互動,Web Service則是比較繁瑣要兩邊都喬好你我都要是SOAP的規格才能有來往。
Web API所採用的REST 跟 Web Service 的 SOAP協議最大差異在於就
資源管理狀態上和所支持的資料格式,
還有一個是通訊協議(SOAP)一個是一種架構風格(REST)。
REST服務屬於總是無狀態的而且格式
可以支援JSON、XML、HTML、txt...等等多種資料格式。
REST請求方法僅支持HTTP的一系列標準方法(GET/POST/PUT/DELETE)
會回傳人眼可直接讀懂的資料內容(較容易理解)
效能較SOAP好(通常用JSON較小的資料格式)
調用方式直接透過URL Path
REST比較像是明信片,在發送上會更便宜更迅速也很容易直接讀取。
SOAP是可有狀態的,可無狀態的,只支援XML形式,自己已先定義
好本身的資料格式(根據WSDL跟UDDI),有對應標題、正文,可選擇服務方法。
可支援較多種通訊協議,除了HTTP外還有支援HTTPS、TCP、UDP、SMTP,
具有協議中立性。
請求方法僅支持HTTP POST
不會直接回傳人眼可立即讀懂的內容
效能較REST差(XML格式資料量較大)
調用方式是透過觸發RPC Method
SOAP則較像信封,信封會需要較多額外處理程序打開或封裝信件內容
(備註:WSDL:Web Services Description Language)
(備註:UDDI: Universal Description Discovery and Integration)
https://www.w3.org/TR/soap/
Web APIeb API相關術語:
Restful 風格的API(Rest API , RESTful Web Services):
Rest 是英文 Representational State Transfer(表現層狀態轉換)
的縮寫,是Roy Thomas Fielding博士於2000年在他的博士論文中提出來的
一種全球資訊網軟體架構風格,不是一種protocol!!!,目的是便於
不同軟體/程式在Internet中可互相傳遞資訊。
一般有四種方法:
GET(查詢)
POST(新增)
PUT(更新)
DELETE(刪除)
摘自:https://www.codecompiled.com/mvc/asp-net-webapi/
也漸漸有更多開發團隊採用此標準進行開發,是未來的趨勢。
Router(路由):
一整個Web API 的入口,當訪問特定某資源就是透過路由
來映射至對應資源URL的,也就是透過URL來獲得資源。
->預設的路由格式: "api/{controller}/{action}/{id}"
action就是一些方法名稱,id則是參數。
Controller(控制器) 跟 Action(動作):
Controller下會包刮很多種Action(也就是一些方法或控制流程)。
MVC的控制器跟Web API的控制器是不太相同的!!!!
差異1.繼承的 Class不同
最大差異在於繼承自哪個Class
->Web API的 XXXController 繼承自ApiController
->MVC的 XXXController繼承自 Controller (實作IController 介面類型物件)
差異2.控制器的Action回傳的狀態
MVC -> 偏向回傳View(畫面)
Web API ->偏向回傳給前端的資料值或者控制流程
Web API Controller實際程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; namespace TestWeb.WebApi.Controllers { /// <summary> /// 標準的restful風格的API,Class名/Method名 /// </summary> public class ValuesController : ApiController { // GET api/values /// <summary> /// /// </summary> /// <returns></returns> public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 /// <summary> /// /// </summary> /// <param name="id"></param> /// <returns></returns> public string Get(int id) { return "value"; } // POST api/values /// <summary> /// /// </summary> /// <param name="value"></param> public void Post([FromBody]string value) { } // PUT api/values/5 /// <summary> /// /// </summary> /// <param name="id"></param> /// <param name="value"></param> public void Put([FromUri]int id, [FromBody]string value) { } // DELETE api/values/5 /// <summary> /// /// </summary> /// <param name="id"></param> public void Delete(int id) { } } } |
MVC的Controller實際程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MVCExampleProject.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } } } |
從空專案來瞭解 asp.net web api
(此範本是不注重介面呈現,著重於後端資料業務處裡)
要開始一個Web API 專案有兩種方法,在不同時機會需要採取相應
的動作,無優劣勢情況來看要選哪種方式來創建或添加。
方法1.自動專案建立法
直接透過專案類型來新增Web API 專案
選擇新增 Web 應用程式後(這裡用vs2017)
選擇空白->勾選Web API
就完成
我們可以看到有
方法2.人工手動添加法
透過事後添加方式(比較多步驟)
這次我只建立一個Web空專案
這裡可以比較空專案跟Web API專案的差異
對專案右鍵開啟 Nuget 套件管理
輸入 Web API後
選擇 Microsoft.AspNet.WebApi 按接受
一些相關參考也會自動被配置好
到這裡都只是手動作相關專案參考前置配置處理而已
一個完整的Web API Project會需要如下目錄跟檔案
因此這裡要
自行手動新增App_Start 目錄還要自己
新增WebApiConfig.cs的 Class檔案(檔名不能改喔,會在Global.asax中被調用)
這裡我就直接Copy剛剛新增的Web API專案自動產生的程式貼入
記得using System.Web.Http;
引入 Web.Http 命名空間避免有錯誤
自己加入需要的Folder (Controllers 跟 Models)
接著要新增Global.asax
右鍵 新增 -> Global Application Class
Default會產生一系列不必要的HTTP生命週期相關函數
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Security; using System.Web.SessionState; namespace WebApp { public class Global : System.Web.HttpApplication { protected void Application_Start(object sender, EventArgs e) { } protected void Session_Start(object sender, EventArgs e) { } protected void Application_BeginRequest(object sender, EventArgs e) { } protected void Application_AuthenticateRequest(object sender, EventArgs e) { } protected void Application_Error(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { } protected void Application_End(object sender, EventArgs e) { } } } |
這裡我們就只保留Application_Start
一個方法就好了
到此我們基本上掌握了Web API 專案架構和基礎知識了
Ref Link:
https://docs.microsoft.com/zh-tw/aspnet/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api
淺談Web Service(一) - SOA(Service-Oriented Architecture)
What are the differences between REST and SOAP?
Are both REST and SOAP an implementation of SOA?
留言
張貼留言