串接API
相信很多時候開發程式不是只有自己開發就可以了,不論是公司外還是公司內部都有打Api的需求,所以在之前那篇Api文件之後今天來談談如何在網頁伺服器中打Api溝通。
RestSharp
「前輩,我們要怎麼打Api跟第三方溝通阿。」
這天大頭收到一個需求,是要跟第三方溝通交換數據,所以大頭跟老K請教要如何跟第三方溝通。
「恩,土炮一點可以用HttpWebRequest或是WebClient來硬幹。」
聽到這裡大頭面有難色,因為這個需求還滿趕的。而老K看到大頭的表情後笑笑的跟他說。
「哈哈剛剛是開玩笑的,你來用用看RestSharp吧」
環境設定
第一動還是不免俗的來設定環境,所以請輸入以下指令。
dotnet add package RestSharp
安裝好套件後接下來說明一下如何使用RestSharp。
發起請求
由於已經習慣依賴注入的開發方式,所以接下來還是以依賴注入的方式來透過RestSharp來發起請求,所以程式開發部分的第一動還是先注入相依的元件,所以在Startup.ConfigureServices
加入以下程式來注入元件。
builder.RegisterType<RestSharp.RestClient>()
.AsImplementedInterfaces()
.InstancePerDependency();
注入完了之後在需求端的部分由建構子注入,並且設定連線的終端即可發起請求,如下列所示。
private readonly IRestClient _client = null;
public WeatherForecastController(ILogger<WeatherForecastController> logger,
IRestClient client)
{
_logger = logger;
_client = client;
}
接下來發起請求的方式如下。
_client.BaseUrl = new Uri("第三方api的url");
var request = new RestRequest("請求的方法", Method.GET);
var fetchResult = await _client.GetAsync<解析後的類別>(request);
如果只有這樣使用的話根本不需要RestSharp,接下來如果有需要傳遞參數的話就透過以下方是傳遞。
request.AddParameter("param1", param2);
request.AddParameter("param2", param2);
再來如果遇到第三方需要傳遞header的話,例如走的是jwt的協定時,就透過以下方式傳遞。
request.AddHeaders("Key", value);
又或者想要簡單一點的作法處理jwt協定可以直接使用Authenticator
,如下列方式。
_client.Authenticator = new RestSharp.Authenticators.JwtAuthenticator("token");
還有如果需求是抓取檔案可以透過以下方法。
var request = new RestRequest("Assets/LargeFile.7z");
request.ResponseWriter = responseStream =>
{
using (responseStream)
{
responseStream.CopyTo(writer);
}
};
var response = _client.DownloadData(request);
最後常會遇到的問題是訪問的網站是沒有ssl憑證的可以透過以下方法來避免錯誤發生。
_client.RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
後記
今天跟小光還有大頭了解如何透過RestSharp跟第三方溝通,透過封裝後的套件讓跟第三方溝通的程式可以寫得更便利,希望大家在處理呼叫第三方Api的開發可以更容易,讓大家更專注在自己邏輯的開發。