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
实例在我的客户端,我可以设置头只有一次。这种方法可以吗?我想避免任何委托和事件。
你必须使用ParameterType.HttpHeader parameter
:
request.AddParameter("Authorization", "data", ParameterType.HttpHeader);
-
在客户端保存认证令牌是完全正常的,只要它是加密的并且具有过期时间。您可以通过在REST API上实现会话来改进它,因此您只需要检查验证令牌是否仍然有效,如果无效则进行身份验证。
-
显然你需要管理你请求REST API的方式,我建议你使用IDisposable Pattern,你可以使用一些lazy实现或Singelton。