(一)ASP.NET Web API 2 - 全新的旅程

在幾年前,開發網站都還是使用ASP.NET WebForm + ASP.NET WebService,雖然傳統、雖然有很多缺點,但對於要維護一個有十多年歷史的系統,實在也是沒辦法;但兩年前,我開始使用類似MVC架構的技術,採用HTML5 + Javascript + Ajax + ASP.NET Web Service的方式,透過SOAP技術讓前後端交換資料,某種程度也符合了關注點分離的概念,效能增加、也很容易尋找程式的Bug,但ASP.NET Web Service並不是標準RESTful API風格,跑起來總是有點拖泥帶水;恰巧最近新系統上線了,為了讓新系統有更長的生命週期、更健康的運行架構,決定採用ASP.NET Web API 2作為新服務的標準技術,並將學習的路程記錄下來,跟大家分享。

關於寫程式,第一篇的內容並不是像安裝軟體、設定系統那樣,直接把步驟像流水帳一樣寫下來與大家分享,寫程式需要有很多基本知識(我也只知道這寫很基本的...誤),況且,寫程式一定會寫出很多Bug,這點沒有人會意外,但總不能連最基本的SQL Injetion、XSS...等最簡單的錯誤都避免不了,那造成的損失可是非常可怕的,所以,我在此先跟大家分享幾個基本知識與技術,讓後續文章的內容更加容易被理解。

CRUD Request (POST / GET / PUT / DELETE)

HTTP Request常見的是GET與POST,但其實還有其他很多不同用途的Request,其中又以PUT與DELETE在ASP.NET Web API 2中常被使用,其用途如下:

# POST GET PUT DELETE
用途 新增資料 取得資料 更新資料 刪除資料
資料傳遞方式 Entity Body URL Entity Body / URL URL
對應SQL Insert Select Update Delete
安全性

簡單的四個操作,分別代表我們最常對資料所做的四種行為,新增、搜尋、修改、刪除,但其實HTML Request不只有這四個操作,還包括Option、Patch...等,但我們僅學習該四種,以免擴大範圍太複雜了點。

ROUTING

在所有技術中,Routing真的是最複雜且最難理解的部分,原因無他,因為這幾乎可以說是ASP.NET Web API最重要的技術,沒有之一,他主宰了Web API接受HTTP Request後所做出的反應與對應的行為,如下表:

動作 HTTP方法 路由 URI
取得全部使用者資料 GET /api/users /api/users
取得特定使用者資料 GET /api/users/{Id} /api/users/a123456789
/api/users?id=a123456789
新增資料 POST /api/users /api/users
更新資料 PUT /api/users/{id} /api/users/a123456789
刪除資料 DELETE /api/users/{id} /api/users/a123456789

由上表可以發現,同一個網址(應該稱URI)可以對應到不同的功能,就是因為Routing的作用,可以分辨不同的HTTP Request的Action,將不同的Action對應至不同的方法。

ADO.NET

不論是從前的Web Form、Web Service,我們熟習的ADO.NET一直陪伴我們,直到Web API也一樣,雖然多了許多新技術,如:Entity Framework、LINQ to SQL...等,但都不影響我們對資料庫操作的方式,你可繼續使用以前習慣的SqlDataSource,或是採用最新的Entity Framework,按照個人習慣為主,雖然有些人會說舊的技術有一些缺點,但說實在的,以開發速度、大型系統複雜度、大型團隊維護性...來看,在新技術上融合一些穩定又好用的舊技術絕對是正確的選擇,因為我們無法要求整個團隊都採用全新的技術,這是現實。

所以,在接下來的文章中,我們仍然使用傳統的SqlDataSource來做為操作資料庫的基礎,除了少部分的地方會使用到一點點的LINQ技術外,SQL語法還是處理資料的大宗。

Ajax in jQuery

簡單說,Ajax就是一種讓網頁前端可以單獨向伺服器端取得資料或操作的技術,不用再像以前Web Form時代,整個網頁都必須全部Post Back一次,以前覺得理所當然,現在覺得這真是一個悲劇阿~ But... But... But...我們不會針對jQuery的Ajax做教學,因為我們將聚焦在ASP.NET Web API 2上,所以若看不懂jQuery Ajax的語法,請至jQuery官方網站,有詳細教學。

其實還有好多技術與名詞,我就不一一解釋說明,以後遇到,我會將該技術或名詞連接到維基百科,大家直接去看比較快~哈哈哈~~~