簡單四步驟:使用ASP.NET Core提供口罩剩餘數量查詢API

簡單四步驟:使用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。

QueryMask Result

這樣就完成一個串接API轉換為自己服務例子。以串接人家的 API 來說,可以看到就是簡單的四個步驟:

  1. 製作 Model
  2. 撰寫 Service
  3. 注冊 Service
  4. 呼叫 Service

用ASP.NET Core來串接API就是那麼簡單。

注意,口罩剩餘數量回傳的資料量不小,每次約1.5MB,請把流量留給需要的應用。請不要拿來亂玩。建議是定時去取回 JSON 資料來處理即可。

原始碼:QueryMaskSample

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。