簡單四步驟:使用ASP.NET Core提供口罩剩餘數量查詢API
以下利用一個ASP.NET Core Web API範例來說明如何在ASP.NET Core撰寫一支去串接政府資料開放平臺的口罩剩餘數量,並提供為API讓人家使用。
資料來源:健保特約機構口罩剩餘數量明細清單
一、製作 Model
我們先在健保特約機構口罩剩餘數量明細清單「檢視資料」裡取得 JSON 格式的資料,並利用 Visual Studio 的 Paste Json as classes 功能快速製作出所需要的 Model:
public class MaskInfo
{
public string 醫事機構代碼 { get; set; }
public string 醫事機構名稱 { get; set; }
public string 醫事機構地址 { get; set; }
public string 醫事機構電話 { get; set; }
public string 成人口罩剩餘數 { get; set; }
public string 兒童口罩剩餘數 { get; set; }
public string 來源資料時間 { get; set; }
}
由於來源資料都已經做過 Unicode 編碼,而 Visual Sutudio 轉換之後會直接用中文呈現。中文的 Model 的使用完全沒問題。
二、撰寫 Service
public class MaskService
{
public HttpClient Client { get; }
public MaskService(HttpClient client)
{
client.BaseAddress = new Uri("https://quality.data.gov.tw/");
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("User-Agent", "QueryMask Sample");
Client = client;
}
public async Task<IEnumerable<MaskInfo>> GetMaskInfo()
{
var response = await Client.GetAsync("dq_download_json.php?nid=116285&md5_url=2150b333756e64325bdbc4a5fd45fad1");
response.EnsureSuccessStatusCode();
using var responseStream = await response.Content.ReadAsStreamAsync();
return await JsonSerializer.DeserializeAsync<IEnumerable<MaskInfo>>(responseStream);
}
}
MaskService
會透過建構式注入 HttpClient
執行個體,之後只是發出 GetAsync()
請求取回資料並與 MaskInfo
物件繫結。
三、注冊 Service
接下來在 Startup 註冊 HttpClient
服務:
services.AddHttpClient<MaskService>();
它才會把 HttpClient
執行個體給注入到 MaskService
裡。
二、呼叫 Service
最後只差把東風補齊。
[Route("[controller]")]
[ApiController]
public class MaskController : ControllerBase
{
private readonly MaskService _maskService;
public MaskController(MaskService maskService)
{
_maskService = maskService;
}
public async Task<IActionResult> Get()
{
try
{
var maskCount = await _maskService.GetMaskInfo();
return Ok(maskCount);
}
catch (HttpRequestException ex)
{
return Problem(ex.Message);
}
}
}
MaskService
是注入進來的。Get()
只是簡單呼叫 Service。
這樣就完成一個串接API轉換為自己服務例子。以串接人家的 API 來說,可以看到就是簡單的四個步驟:
- 製作 Model
- 撰寫 Service
- 注冊 Service
- 呼叫 Service
用ASP.NET Core來串接API就是那麼簡單。
注意,口罩剩餘數量回傳的資料量不小,每次約1.5MB,請把流量留給需要的應用。請不要拿來亂玩。建議是定時去取回 JSON 資料來處理即可。
原始碼:QueryMaskSample
沒有留言:
張貼留言
感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。