近期不是加班就是在家玩,自學進度又緩下來了,實在是難堅持啊,倒是減肥略有成效,現在最佳紀錄是77.9 KG
項目里經常要在某系統里提供一個接口給其它系統,做些數據交互,一般有這幾種方式,都有用到,總結一下吧:
1、數據庫直接存取:
如果各系統的數據庫都在一台服務器上,或能通過鏈接服務器訪問,那直接通過數據庫存取數據也是可以的。
系統里一般都有維護一張配置表,增加一個配置項,XX系統的鏈接服務器名和數據庫名,如XXLinkServer.XXDb.dbo.
要存取數據時,存儲過程里先取出SELECT @LinkDb = XX FROM XXConfig(取出【XXLinkServer.XXDb.dbo.】),再拼接字符串,比如
SET @SqlText = 'SELECT * FROM ''' + @LinkDb + '''XXTable;'
EXEC (@SqlText)
如在同一台服務器上,則不用鏈接服務器,直接配置項為XXDb.dbo.,或配一台指向本機的鏈接服務器也可以(性能也能會受影響)
直接存取數據庫,速度快,效率高,要什么數據直接就有,各種表自已去關聯
但由於直接開放數據庫,安全不好保證,取數據還好,亂寫數據會影響其它系統。鏈接服務器為了方便都是用sa連,要配置相應用戶權限的鏈接服務器很麻煩。而且要對表結構比較了解
2、數據庫存儲過程接口
提供一個XXInterface的存儲過程,傳一些ID、TYPE之類的參數進去,獲取/提交數據。
內部系統不對外開放,有點接口的意思了,但需要通過數據庫后台調用。
3、控制器方法
增加一個開放的控制器,里面提供一些方法,傳參數進來獲取數據,返回字符串或Json
和WebApi比較類似,但不如WebApi好
4、WebApi
其它同事推薦用這種方法,和普通控制器差不多,但一般控制器繼承自Controller,WebApi繼承自ApiController
WebApi專門用來對接數據,更好控制HTTP返回碼之類,對XML、JSON也支持的更好
[FromUri]可以把URL中的參數解析成數據實體,強制不讀Post的數據
默認是[FromBody],從Post的Data中讀數據
使用過程中,如果只是基本的獲取數據,感覺WebApi和普通的控制器方法區別不大,但WebApi更加通用和規范,還有很多特性可擴展(比如綁定IP、驗證用戶、異常獲取等)
WebApi有個巨坑的地方,如果你方法名是GetXX,那它默認就是只能用GET,哪怕加上[HTTPPOST]頭也不行。。。
方法名以Get開頭,WebApi會自動默認這個請求就是get請求,而如果你以其他名稱開頭而又不標注方法的請求方式,那么這個時候服務器雖然找到了這個方法,但是由於請求方式不確定,所以直接返回給你405——方法不被允許的錯誤。
所有的WebApi方法最好是加上請求的方式([HttpGet]/[HttpPost]/[HttpPut]/[HttpDelete]),不要偷懶,這樣既能防止類似的錯誤,也有利於方法的維護,別人一看就知道這個方法是什么請求。
5、WebService
和其它公司的數據交換幾乎都是通過WebService,但自已沒搭建過,只用過別人的