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