D-05-串接API ? RestSharp

串接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的开发可以更容易,让大家更专注在自己逻辑的开发。


<<:  [DAY25] 用 Azure Machine Learning SDK 注册模型与部署

>>:  [早餐吃到饱-6] JR Inn Sapporo #日本北海道

Ruby幼幼班--Single Number

Single Number 黑魔法集合.... 题目连结:https://leetcode.com...

[Day26] React - 设定属性(style属性 & 事件属性)

设定style属性 上一篇有提到我们可以在React.createElement的第二个参数设定Re...

#11 No-code 之旅 — 在 Next.js 专案中显示 Notion 的资料 ft. Notion SDK

哈罗!昨天使用 SWR 实作了一个小功能,让使用者可以列出某 Github user 的所有公开 r...

【Day 17】 实作 - 启用 AWS VPC 日志

哈罗大家好~ 美好的礼拜五终於到了.... 明後天就有更多时间可以赶铁人赛了哈哈 (呜呜抱佛脚活该的...

Day 19 - 将 NEWS 後台储存资料提取後,送至前台渲染画面 (上) - News List Page CTE 暂存表应用 - ASP.NET Web Forms C#

=x= 🌵 NEWS 前台 List 页面後端功能制作。 NEWS List 页面资料介绍 : 📌 ...