吳孟春 周捷 朱忠勇
摘 要
Web API是核心ASP.NET平臺(tái)的一部分,讓你能夠快速而方便地創(chuàng)建Web服務(wù),以便為HTTP客戶端提供API。本文簡(jiǎn)單的介紹了Asp.net Web API 相關(guān)的概念,及它的優(yōu)點(diǎn)和應(yīng)用環(huán)境,并通過Web API接口開發(fā)的實(shí)例和方法,闡述如何在asp.net MVC中使用Web API實(shí)現(xiàn)氣象數(shù)據(jù)接口的開發(fā),并以詳細(xì)的步驟和代碼展示了應(yīng)用Web API接口框架的開發(fā)過程。
【關(guān)鍵詞】Web API WCF API控制器 氣象業(yè)務(wù)數(shù)據(jù)
本文簡(jiǎn)單介紹了如何在asp.net MVC中使用Web API實(shí)現(xiàn)氣象數(shù)據(jù)接口的開發(fā),并以完整步驟和代碼展示了應(yīng)用Web API接口框架的開發(fā)過程。
1 前言
在氣象局域網(wǎng)中的業(yè)務(wù)數(shù)據(jù)應(yīng)用可通過數(shù)據(jù)庫(kù)和文件直接調(diào)用,但為外部門提供數(shù)據(jù)共享和服務(wù)時(shí)通常采用數(shù)據(jù)接口,這樣擴(kuò)展性好,便于維護(hù),而且有利于數(shù)據(jù)源的安全。如通常應(yīng)用的Web service和WCF數(shù)據(jù)接口。而如今互聯(lián)網(wǎng)和無(wú)線網(wǎng)絡(luò)的快速發(fā)展,為氣象應(yīng)用和服務(wù)提供了更多的平臺(tái),如手機(jī)終端、平板電腦以及多媒體預(yù)警信息發(fā)布終端,網(wǎng)站、手機(jī)APP、微信等。面對(duì)越來(lái)越多的基于互聯(lián)網(wǎng)模式的應(yīng)用,Web API便是一種快捷的提供數(shù)據(jù)服務(wù)的接口方式。
2 Web API
2.1 Web API簡(jiǎn)介
Web API是一種應(yīng)用接口框架,它能夠構(gòu)建HTTP服務(wù)以支撐更廣泛的客戶端如瀏覽器,手機(jī)和平板電腦等移動(dòng)設(shè)備終端以及傳統(tǒng)的桌面應(yīng)用程序等框架,如圖1所示。Web API是一種用于在.NET Framework上構(gòu)建RESTful應(yīng)用程序的理想平臺(tái),構(gòu)建HTTP服務(wù)提供強(qiáng)大的數(shù)據(jù)服務(wù)。
2.2 Web API和WCF的比較
WCF和Web Service都是基于SOAP的,主要的數(shù)據(jù)格式是XML,支持HTTP協(xié)議,主要部署在IIS上,且配置比較復(fù)雜;而Web API則是一個(gè)輕量級(jí)的HTTP服務(wù)的新框架。如果所部署的服務(wù)是基于TCP的,需支持更多的傳輸機(jī)制,可選擇WCF;如果平臺(tái)不支持SOAP和WS-*協(xié)議的時(shí)候,則可選擇Web API。也就是說,構(gòu)建一個(gè)跨平臺(tái)的服務(wù),使用WCF,如通過專線構(gòu)建與水利局、環(huán)保局的數(shù)據(jù)服務(wù);構(gòu)建基于因特網(wǎng)的服務(wù),那么就使用Web API,如通過互聯(lián)網(wǎng)的微信、手機(jī)終端等。
3 氣象數(shù)據(jù)接口設(shè)計(jì)
由于氣象業(yè)務(wù)的不斷擴(kuò)展,氣象微信、手機(jī)和平板電腦的移動(dòng)APP,安裝在鄉(xiāng)鎮(zhèn)、社區(qū)和公共場(chǎng)所的氣象預(yù)警信息發(fā)布終端;安裝公共場(chǎng)所的多媒體信息機(jī)等等這些通過互聯(lián)網(wǎng)的氣象應(yīng)用和服務(wù)終端都需要實(shí)時(shí)的氣象數(shù)據(jù),那么構(gòu)建Web API,可解決遠(yuǎn)程的數(shù)據(jù)實(shí)時(shí)傳輸和交互,就可為各應(yīng)用提供實(shí)時(shí)的數(shù)據(jù)接口服務(wù)。
3.1 業(yè)務(wù)數(shù)據(jù)服務(wù)
常用于數(shù)據(jù)應(yīng)用服務(wù)的氣象業(yè)務(wù)數(shù)據(jù)主要有實(shí)況數(shù)據(jù)、天氣預(yù)報(bào)、臺(tái)風(fēng)信息、預(yù)警信息及各種氣象分析數(shù)據(jù),這些數(shù)據(jù)主要用于WEB網(wǎng)站、微信、各移動(dòng)終端、桌面應(yīng)用平臺(tái)等。圖2為氣象業(yè)務(wù)數(shù)據(jù)流程圖。
在應(yīng)用服務(wù)流程圖中,構(gòu)建Web API層作為一個(gè)氣象數(shù)據(jù)的公共的接口層,可以保證接口提供的應(yīng)用層的數(shù)據(jù)一致性。再通過業(yè)務(wù)邏輯層整合數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)訪問層,調(diào)用數(shù)據(jù)庫(kù)所存儲(chǔ)的各類數(shù)據(jù)。這樣構(gòu)建的Web API的接口層就能為所有接入的客戶端提供豐富的數(shù)據(jù)接口,從而實(shí)現(xiàn)快捷靈活的接入。
3.2 Web API的開發(fā)
Vs2012以后的版本都已引入了ASP.NET Web API技術(shù)。Web API用于提供REST風(fēng)格的WebService,新建立的WebAPI項(xiàng)目,包含主要的Models、Views、Controllers等文件夾和Global.asax文件,和MVC項(xiàng)目一樣。Models目錄項(xiàng)主要用于保存Service和Client交互的對(duì)象,這些對(duì)象會(huì)被轉(zhuǎn)換為Json數(shù)據(jù)格式進(jìn)行數(shù)據(jù)傳輸;Controllers目錄中所對(duì)應(yīng)的Controller繼承API的ApiController,用于添加方法,用于提供各種數(shù)據(jù)服務(wù);Global.asax用于配置路由規(guī)則。
3.2.1 建立Web API項(xiàng)目
運(yùn)行Vs2012,新建項(xiàng)目,選擇ASP.net MVC4 Web應(yīng)用程序,再選擇Web API
3.2.2 建立控制器文件,添加action
在建立的項(xiàng)目里面有自動(dòng)生成的webapi模版,其中App_Start文件夾下WebApiConfig.cs和RouteConfig.cs文件主要配置api的路由信息。Controllers文件夾下的文件為api的實(shí)現(xiàn)文件。在Controllers文件夾下新建控件器文件QxDataApiController.cs,我們可以在Controller目錄上創(chuàng)建更多的應(yīng)用API控制器,其中的QxDataApi是Controller在路由中使用的名稱。在文件中新加入兩個(gè)Get方法的api為例,一個(gè)不帶參數(shù)的方法,一個(gè)帶參數(shù)的方法。
※不帶參數(shù)的方法
//返回當(dāng)天市區(qū)天氣預(yù)報(bào)
[System.Web.Http.HttpGet]
public tqyb wztqybdata()
{
tqyb tq=null;
SqlConnection sqlconn= new SqlConnection();
sqlconn.ConnectionString = configuration.AppSettings.Settings["sqlconn"].Value.ToString().Trim();
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.CommandType = CommandType.Text;
sqlCmd.CommandText = "SELECT TOP(1) station,F(xiàn)orecasttime,forecastdata FROM TqybData ORDER BY ID DESC";
sqlCmd.Connection = sqlconn;
sqlconn.Open();
SqlDataReader sr=sqlCmd.ExecuteReader();
while (sr.Read())
{
tq = new tqyb();
tq.station= sr.GetValue(0).ToString();
tq.Forecasttime =DateTime.Parse(sr.GetValue(1).ToString());
tq.forecastdata= sr.GetValue(2).ToString();
}
sqlconn.Close();
}
※帶參數(shù)的方法
//以站點(diǎn)做為參數(shù),返回站點(diǎn)所對(duì)應(yīng)最新時(shí)次的雨量,氣溫,濕度。
// http://localhost:31087/api/QxDataApi/zdzdata/?station=58659
[System.Web.Http.HttpGet]
public zdzinfo zdzdata(string station)
{
zdzinfo zdz= null;
SqlConnection sqlconn = new SqlConnection();
……….
sqlconn.Close();
return zdz;
}
3.2.3 修改WebApiConfig.cs文件
默認(rèn)的路由路徑是routeTemplate:"api/{controller}/{id}",當(dāng)要寫多個(gè)方法時(shí),就需要修改配置,加入Action。在WebApiConfig.cs文件中配置路由路徑:routeTemplate: "api/{controller}/{Action}/{id}",其中,controller:QxDataApi,action:寫的方法名,id:傳入的參數(shù)。
3.3 IIS下部署WebAPI
在服務(wù)器上安裝了IIS服務(wù),并且安裝了.net4.5。打開IIS信息服務(wù)管理器
右擊網(wǎng)站,點(diǎn)擊添加網(wǎng)站(轉(zhuǎn)化成應(yīng)用程序),配置好后確保應(yīng)用程序池的.net版本是.net 4.5(在IIS里面顯示為4.0);然后點(diǎn)擊高級(jí)設(shè)置,確定我們的應(yīng)用程序池是我們的4.0,然后打開Web.Config在
4 結(jié)語(yǔ)
數(shù)據(jù)是一個(gè)業(yè)務(wù)部門的核心,數(shù)據(jù)共享也是各部門加強(qiáng)合作的一個(gè)重要途徑,而開發(fā)和開放數(shù)據(jù)接口則是解決通過網(wǎng)絡(luò)傳輸數(shù)據(jù)和數(shù)據(jù)訪問的一個(gè)重要方法。當(dāng)前,隨著互聯(lián)網(wǎng)和智能終端應(yīng)用的不斷增多,應(yīng)用Web API技術(shù)開發(fā)輕量級(jí)的數(shù)據(jù)接口是一種基于HTTP服務(wù)、開放性強(qiáng)、數(shù)據(jù)集成高的數(shù)據(jù)共享應(yīng)用方法。
參考文獻(xiàn)
[1]http://www.cnblogs.com/r01cn/p/3772990.html.
[2]https://msdn.microsoft.com/zh-cn/library/hh833994(v%3Dvs.108).aspx.
[3][美]內(nèi)格爾等著,李銘譯.C#高級(jí)編程(第9版)[M].北京:清華大學(xué)出版社,2014:1416-1443.
作者單位
溫州市氣象局 浙江省溫州市 325027