前情提要
筆者這篇就繼續來介紹Refit
的各種用法,依照篇幅會再拆成數篇,筆者會參考官方Document
的脈絡,加上筆者已經在工作場合上用到的一些技巧,詳細介紹其用法,好的套件會帶你飛,真的不是說說而已,Refit
的API,完全足夠克服於工作場合中遇到的各種挑戰,讓你輕鬆完成Http Request
的請求。
內容
API Atttribute
這一節就是設定Http Methods
的套用,就很直覺地將Method當作Keyword套上,滿像dotnet mvc
的Route
設置,只是沒有Http
這個Keyword
,Refit
這邊就只保留Get
, Post
,其餘跟Route
設定十分相像。還有一些AliasAs
,Route參數可以為Object的某一個屬性值
等進階設定可以使用,筆者這邊目前沒用到就不做特別介紹,有需求的朋友可以到官方Docuement
參考其用法
1 | // 與Route設定一樣,Route參數則透過大括弧包住對應參數名稱 |
Request內容設定
如筆者在這系列文中的第一篇所說,筆者負責的系統特性,與第三方廠商串接,各種需求都會出現,Refit
這邊都有對應的解法,能叫人不愛嗎?以筆者工作場合中用到的為主作介紹,目前碰到的將Request
內容傳送的型式為
- 塞於
Body
,最常見的一種 FormPost
型式,比較老牌的廠商愛用QueryParameters
,偶爾有遇到查詢參數放置於QueryParameters
中
Body
這就是最簡單也最常見的一種,以Refit
來說,這也是預設的一種,因此沒有套上此Attribute
,預設也會透過Body
型式傳送,筆者這邊就為容易分辨Body
參數或其他Route
參數,都會套上[Body]
,示意如下
1 | [ ] |
FormPost
若串接的Rest API
為FormPost
的型式塞入Request
則,需再爾外設定,設定方式也是簡單,將[Body]
上多加上設定,調整為[Body(BodySerializationMethod.UrlEncoded)]
,示意如下
1 | [ ] |
QueryParameters
若以QueryParameters
的型式傳出Request
內容則,需透過[Query]
這個Attribute
讓Refit
知道,筆者這系列的第一篇即是Query
的型式送出Request
內容,如下
1 | [ ] |
Header設定
如筆者在這系列文中第一篇提到的痛點,Header
的值設定,在Refit
世界中如此的簡單啊,靜態,動態皆可設定,示意如下:
1 | // 靜態:該第三方API串接時固定帶入某一個值 |
ContentType設定
筆者這邊接觸到的就跟大家一般常見到的一樣,json
及xml
application/json
這個是一般常見也是Refit
的預設模式,若串接對象API
為application/json
則不用增加任何爾外設定。
application/xml
若串接對象API
需要透過Xml
格式則,需要再爾外安裝Refit
的延伸套件: Refit.Xml
1 | dotnet add package Refit.Xml |
安裝完成後,Refit
服務註冊時需爾外設定其RefitSettings
1 | services.AddRefitClient<IxxApiRepository>(new RefitSettings() |
最後切記,若有需求是C# class
中的PropertyName
與傳出去的xml
封包中的名稱不一樣則,套用Xml
相關Attribute
設定,而非System.Text.Json
相關Attribute
設定
1 | [ ] |
實際應用場景
筆者這邊使用方式為,HttpRequest
當作是一種Repository
來源,因此會把interface
定義於Repository
層,當然每一個獨立的Repository
搭配一個ApiService
,用意是甚麼呢,畢竟Refit
幫你完成的是基礎又瑣碎的HttpRequest
請求,但收到Response
之後的解析,則算是商業邏輯層處理,HttpRequest
相關的商業邏輯處理就寫在ApiService
中,因此筆者針對一家第三方廠商的API
串接,固定會有
IxxApiRepository
IxxApiService
最後附送一張實際開發中的專案,已經有數個第三方廠商的API
串接,依照不同第三方廠商,就會建立一個獨立的IxxApiRepository
![[Dotnet Core Project: Repository List]](/2023/07/08/dotnetcore-refit-api-intro/Untitled.png)
結論
這篇主要是以較常用到的API介紹為主,其中包含Http Methods
及Route
設定,Request
的不同型式呈現,Content Type
不同設定,了解到這邊,足以應付各種大大小小的Rest API
串接了,下篇將介紹Refit
的Respone
回傳值相關說明。
參考