前情提要
筆者這篇就繼續來介紹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
結論
這篇主要是以較常用到的API介紹為主,其中包含Http Methods
及Route
設定,Request
的不同型式呈現,Content Type
不同設定,了解到這邊,足以應付各種大大小小的Rest API
串接了,下篇將介紹Refit
的Respone
回傳值相關說明。
參考