REST客户端中的单个请求对象实例可以吗?

本文关键字:实例 对象 请求 客户端 单个 REST | 更新日期: 2023-09-27 18:14:11

我正在为c# WinForm应用程序编写一个简单的REST客户端。我使用RestSharp使发送请求和获得响应更容易。关于如何设计我的客户端,我有几个问题。

用户只与客户端交互一次。他推了一个Button,客户端被实例化,并传递给private方法在后台做一些逻辑。它从服务器访问对象,并将它们与用户内部数据库中的对象同步。

关键是客户端的方法是由private方法访问的,这些方法是在用户在GUI中的单个操作之后调用的。他无法控制调用客户端的哪些方法,以及以何种顺序调用。

我的问题是:

  • 当我实例化我的客户端时,我可以只向服务器请求一次令牌,然后将其存储在客户端实例中,以便在客户端的后续请求中引用吗?令牌是用户名和密码的散列,因此它不应该随时间变化。当然,一旦创建了客户机的新实例,它将再次向服务器请求令牌。

  • 是否可以在我的客户端保持单个Request对象实例?然后,我可以只设置一次请求头,所有访问API的方法只需要更改请求的资源URL和HTTP方法。这将减少我代码中的重复。

例如:

public PriceListItem[] GetPriceListItems()
{
   string requestUrl = Resources.PriceListItemsUrl;
   var request = new RestRequest(requestUrl, Method.GET);
   request.AddHeader("SecureToken", _token);
   var response = Client.Execute(request) as RestResponse;
   JObject jObject = JObject.Parse(response.Content);
   var priceListItems = jObject["Data"].ToObject<PriceListItem[]>();
   return priceListItems;
}

我有相当多的方法来利用不同的资源url,但都有相同的头。如果我只保留一个Request实例在我的客户端,我可以设置头只有一次。这种方法可以吗?我想避免任何委托和事件。

REST客户端中的单个请求对象实例可以吗?

你必须使用ParameterType.HttpHeader parameter:

request.AddParameter("Authorization", "data", ParameterType.HttpHeader);
  1. 在客户端保存认证令牌是完全正常的,只要它是加密的并且具有过期时间。您可以通过在REST API上实现会话来改进它,因此您只需要检查验证令牌是否仍然有效,如果无效则进行身份验证。

  2. 显然你需要管理你请求REST API的方式,我建议你使用IDisposable Pattern,你可以使用一些lazy实现或Singelton。