在幾年前,開發網站都還是使用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...等最簡單的錯誤都避免不了,那造成的損失可是非常可怕的,所以,我在此先跟大家分享幾個基本知識與技術,讓後續文章的內容更加容易被理解。
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真的是最複雜且最難理解的部分,原因無他,因為這幾乎可以說是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對應至不同的方法。
不論是從前的Web Form、Web Service,我們熟習的ADO.NET一直陪伴我們,直到Web API也一樣,雖然多了許多新技術,如:Entity Framework、LINQ to SQL...等,但都不影響我們對資料庫操作的方式,你可繼續使用以前習慣的SqlDataSource,或是採用最新的Entity Framework,按照個人習慣為主,雖然有些人會說舊的技術有一些缺點,但說實在的,以開發速度、大型系統複雜度、大型團隊維護性...來看,在新技術上融合一些穩定又好用的舊技術絕對是正確的選擇,因為我們無法要求整個團隊都採用全新的技術,這是現實。
所以,在接下來的文章中,我們仍然使用傳統的SqlDataSource來做為操作資料庫的基礎,除了少部分的地方會使用到一點點的LINQ技術外,SQL語法還是處理資料的大宗。
簡單說,Ajax就是一種讓網頁前端可以單獨向伺服器端取得資料或操作的技術,不用再像以前Web Form時代,整個網頁都必須全部Post Back一次,以前覺得理所當然,現在覺得這真是一個悲劇阿~ But... But... But...我們不會針對jQuery的Ajax做教學,因為我們將聚焦在ASP.NET Web API 2上,所以若看不懂jQuery Ajax的語法,請至jQuery官方網站,有詳細教學。
其實還有好多技術與名詞,我就不一一解釋說明,以後遇到,我會將該技術或名詞連接到維基百科,大家直接去看比較快~哈哈哈~~~