WebApiClient百度地图服务接口实践
1. 文章目的
隨著WebApiClient的不斷完善,越來(lái)越多開(kāi)發(fā)者選擇WebApiClient替換原生的HttpClient,然而在應(yīng)用到實(shí)際項(xiàng)目中多多少少會(huì)遇到一些項(xiàng)目結(jié)合上的疑問(wèn)和困難,本文將以WebApiClient使用者的身份,在Asp.net core mvc項(xiàng)目中使用WebApiClient來(lái)請(qǐng)求百度地圖服務(wù)接口,以展示W(wǎng)ebApiClient的使用技巧。
2. 百度地圖服務(wù)接口
靜態(tài)圖接口
http://api.map.baidu.com/staticimage/v2?ak=你的密鑰&mcode=666666¢er=116.403874,39.914888&width=300&height=200&zoom=11
坐標(biāo)轉(zhuǎn)換接口
http://api.map.baidu.com/geoconv/v1/?coords=114.21892734521,29.575429778924&from=1&to=5&ak=你的密鑰
3. 接口分析
通過(guò)分析百度地圖的接口,我們發(fā)現(xiàn):
所有接口都在api.map.baidu.com這個(gè)域名上;
ak參數(shù)是一個(gè)客戶(hù)端身份標(biāo)識(shí)的參數(shù),所有請(qǐng)求接口都需要附加這個(gè)ak值;
接口中需要的116.403874,39.914888這種參數(shù)值,實(shí)際是(經(jīng)度,緯度),為兩個(gè)值組成;
from和to是枚舉數(shù)值類(lèi)型;
在我們進(jìn)行Coding的時(shí)候,應(yīng)該重點(diǎn)考慮這些共性,以減少重復(fù)的工作內(nèi)容。
4. 接口聲明
4.1 公共域名
[HttpHost("http://api.map.baidu.com/")]public interface IBdMapApi : IHttpApi{ }
4.2 公共的AK參數(shù)
我們要實(shí)現(xiàn)一個(gè)接口級(jí)或方法級(jí)的ApiAction特性,用于給請(qǐng)求路徑增加公共的ak參數(shù):
然后把Ak特性追加到接口上:
[HttpHost("http://api.map.baidu.com/")] [Ak("qde9uxuEhwMlngvTbWGo3BIQOKfqvjdc")]public interface IBdMapApi : IHttpApi{ }
4.3 靜態(tài)圖staticimage接口
參照接口文檔,聲明最初的StaticImage接口:
目前center參數(shù)是string類(lèi)型,約束性非常弱,與接口要求的(經(jīng)度,緯度)這種格式數(shù)據(jù)差異比較大。所以我們應(yīng)該定一個(gè)繼承自IApiParameterable的BdLocation類(lèi)型,將傳入的經(jīng)度和緯度轉(zhuǎn)換為這種文本格式:
修改后StaticImage接口修改為:
[HttpGet("staticimage/v2")]ITask<Stream> StaticImageAsync(BdLocation center, ? ?int width = 300, ? ?int height = 200, ? ?int zoom = 11, ? ?int mcode = 666666);
4.4 坐標(biāo)轉(zhuǎn)換Geoconv接口
依照文檔,編寫(xiě)出最初的接口
[HttpGet("geoconv/v1/")]ITask<string> GeoconvAsync(string coords, int from = 1, int to = 5);
和StaticImage接口一樣,我們還需要合理修改這個(gè)接口的參數(shù)約束,coords實(shí)際為BdLocation類(lèi)型, from和to可以修改為枚舉類(lèi)型,返回值string修改為強(qiáng)類(lèi)型的模型,修改后的接口為:
[HttpGet("geoconv/v1/")] ITask<BdResult<BdPoint[]GeoconvAsync(BdLocation coords,BdFrom from = BdFrom.wgs84,BdTo to = BdTo.bd09ll);4.5 完整的接口聲明
5. 接口的依賴(lài)注入
WebApiClient的HttpApiClient創(chuàng)建的代理實(shí)例,適合使用單例模式,在支持依賴(lài)注入的項(xiàng)目開(kāi)發(fā)中,應(yīng)盡量使用依賴(lài)注入來(lái)完成HttpApiClient的創(chuàng)建和生命周期管理。
5.1?Asp.net core的依賴(lài)注入
在ConfigureServices方法里添加IBdMapApi的注入配置
如果項(xiàng)目里聲明了很多接口,比如IBaiduApi、ITengxunApi等等,可以循環(huán)批量注入:
5.2 接收和使用IBdMapApi代理實(shí)例
6. 監(jiān)視請(qǐng)求提交的內(nèi)容
WebApiClient對(duì)Http請(qǐng)求進(jìn)行的高度抽象,只有聲明,沒(méi)有實(shí)現(xiàn),在沒(méi)有熟悉WebApiClient的情況下,我們開(kāi)發(fā)中可能需要在請(qǐng)求發(fā)送的內(nèi)容進(jìn)行監(jiān)視,從而知道是否符合服務(wù)器的接口數(shù)據(jù)要求。在不使用第三方工具比如Fiddler等的情況下,我們可以為接口修飾一個(gè)自定義過(guò)濾器,在過(guò)濾器里實(shí)現(xiàn)訪打印求消息內(nèi)容的能力。
6.1 定義TraceFilter過(guò)濾器
6.2 接口關(guān)聯(lián)TraceFilter
6.3 查看請(qǐng)求內(nèi)容
開(kāi)啟程序調(diào)試,輸出窗口里打印
7. 結(jié)束語(yǔ)
博主為WebApiClient庫(kù)的作者,致力于站在使用者的角度去設(shè)計(jì)WebApiClient,歡迎大家給WebApiClient提建議。
原文地址:https://www.cnblogs.com/kewei/p/9399372.html
.NET社區(qū)新聞,深度好文,歡迎訪問(wèn)公眾號(hào)文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的WebApiClient百度地图服务接口实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ASP.NET Core 2.0 MVC
- 下一篇: Dependency injection