在REST客户单请求对象实例好吗?(Is single Request object instanc

2019-10-20 12:24发布

我正在写一个简单的REST客户端的C#WinForm应用程序。 我用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比如在我的客户,我可以设置页眉只有一次。 这是方法好吗? 我想,以避免任何委托和事件。

Answer 1:

你必须使用ParameterType.HttpHeader parameter

request.AddParameter("Authorization", "data", ParameterType.HttpHeader);


Answer 2:

  1. 这是完全正常的,以节省客户端身份验证令牌,只要它是加密的 ,并已在其到期时间 。 你可以改善它与你的REST API实现的会话,所以你只需要检查身份验证令牌仍然有效与否,并进行认证,如果它是无效的。

  2. 显然,你需要管理你的请求对REST API的方式,我推荐你使用IDisposable模式对于这种方式,你可以利用一些懒惰的实施或Singelton。



文章来源: Is single Request object instance in REST client okay?