add support for parameter building on ApiClient
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
using Castle.Core.Logging;
|
using Castle.Core.Logging;
|
||||||
|
using Pilz.Extensions.Collections;
|
||||||
|
using System.Text.Encodings.Web;
|
||||||
|
using System.Web;
|
||||||
|
|
||||||
namespace Pilz.Net.Api;
|
namespace Pilz.Net.Api;
|
||||||
|
|
||||||
@@ -14,64 +17,24 @@ public class ApiClient(string apiUrl) : IApiClient
|
|||||||
|
|
||||||
public ILogger Log { get; set; } = NullLogger.Instance;
|
public ILogger Log { get; set; } = NullLogger.Instance;
|
||||||
|
|
||||||
public virtual Task<ApiResponse> SendRequest(string route)
|
public virtual async Task<ApiResponse> SendRequest(string route, HttpMethod method, ApiMessage? message, IDictionary<string, object>? @params, IApiMessageSerializer? serializer)
|
||||||
{
|
|
||||||
return SendRequest(route, HttpMethod.Post);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual Task<ApiResponse> SendRequest(string route, HttpMethod method)
|
|
||||||
{
|
|
||||||
return SendRequest(route, method, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual Task<ApiResponse> SendRequest(string route, ApiMessage? message)
|
|
||||||
{
|
|
||||||
return SendRequest(route, HttpMethod.Post, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual Task<ApiResponse> SendRequest(string route, HttpMethod method, ApiMessage? message)
|
|
||||||
{
|
|
||||||
return SendRequest(route, method, message, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual async Task<ApiResponse> SendRequest(string route, HttpMethod method, ApiMessage? message, IApiMessageSerializer? serializer)
|
|
||||||
{
|
{
|
||||||
serializer ??= Serializer;
|
serializer ??= Serializer;
|
||||||
|
|
||||||
Log.InfoFormat("Send message to {0}", route);
|
Log.InfoFormat("Send message to {0}", route);
|
||||||
|
|
||||||
var res = await Send(route, method, message, serializer);
|
var res = await Send(route, method, message, @params, serializer);
|
||||||
|
|
||||||
return new(res.StatusCode);
|
return new(res.StatusCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route) where TResponse : ApiMessage
|
public virtual async Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, ApiMessage? message, IDictionary<string, object>? @params, IApiMessageSerializer? serializer) where TResponse : ApiMessage
|
||||||
{
|
|
||||||
return SendRequest<TResponse>(route, HttpMethod.Post);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method) where TResponse : ApiMessage
|
|
||||||
{
|
|
||||||
return SendRequest<TResponse>(route, method, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, ApiMessage? message) where TResponse : ApiMessage
|
|
||||||
{
|
|
||||||
return SendRequest<TResponse>(route, HttpMethod.Post, message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, ApiMessage? message) where TResponse : ApiMessage
|
|
||||||
{
|
|
||||||
return SendRequest<TResponse>(route, method, message, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public virtual async Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, ApiMessage? message, IApiMessageSerializer? serializer) where TResponse : ApiMessage
|
|
||||||
{
|
{
|
||||||
serializer ??= Serializer;
|
serializer ??= Serializer;
|
||||||
|
|
||||||
Log.InfoFormat("Send request to {0}", route);
|
Log.InfoFormat("Send request to {0}", route);
|
||||||
|
|
||||||
var res = await Send(route, method, message, serializer);
|
var res = await Send(route, method, message, @params, serializer);
|
||||||
TResponse? result = null;
|
TResponse? result = null;
|
||||||
|
|
||||||
if (res.IsSuccessStatusCode)
|
if (res.IsSuccessStatusCode)
|
||||||
@@ -80,9 +43,9 @@ public class ApiClient(string apiUrl) : IApiClient
|
|||||||
return new(res.StatusCode, result);
|
return new(res.StatusCode, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual async Task<HttpResponseMessage> Send(string route, HttpMethod method, ApiMessage? message, IApiMessageSerializer serializer)
|
protected virtual async Task<HttpResponseMessage> Send(string route, HttpMethod method, ApiMessage? message, IDictionary<string, object>? @params, IApiMessageSerializer serializer)
|
||||||
{
|
{
|
||||||
var url = ApiUrl + route;
|
var url = ApiUrl + route + BuildParameters(@params);
|
||||||
HttpContent content;
|
HttpContent content;
|
||||||
|
|
||||||
Log.DebugFormat("Api endpoint url is {0}", url);
|
Log.DebugFormat("Api endpoint url is {0}", url);
|
||||||
@@ -108,6 +71,24 @@ public class ApiClient(string apiUrl) : IApiClient
|
|||||||
return await httpClient.SendAsync(httpmsg);
|
return await httpClient.SendAsync(httpmsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual string BuildParameters(IDictionary<string, object>? @params)
|
||||||
|
{
|
||||||
|
if (@params == null || @params.Count == 0)
|
||||||
|
return string.Empty;
|
||||||
|
|
||||||
|
return "?" + string.Join("&", @params.Select(kvp =>
|
||||||
|
{
|
||||||
|
var key = kvp.Key;
|
||||||
|
var value = HttpUtility.UrlEncode(ConvertParameter(kvp.Value));
|
||||||
|
return $"{key}={value}";
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual string ConvertParameter(object @param)
|
||||||
|
{
|
||||||
|
return (string)Convert.ChangeType(@param, typeof(string));
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual string? EncodeAuthKey()
|
protected virtual string? EncodeAuthKey()
|
||||||
{
|
{
|
||||||
return AuthKey;
|
return AuthKey;
|
||||||
|
|||||||
@@ -12,23 +12,67 @@ public interface IApiClient
|
|||||||
|
|
||||||
ILogger Log { get; set; }
|
ILogger Log { get; set; }
|
||||||
|
|
||||||
Task<ApiResponse> SendRequest(string route);
|
Task<ApiResponse> SendRequest(string route, HttpMethod method, ApiMessage? message, IDictionary<string, object>? @params, IApiMessageSerializer? serializer);
|
||||||
|
|
||||||
Task<ApiResponse> SendRequest(string route, HttpMethod method);
|
Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, ApiMessage? message, IDictionary<string, object>? @params, IApiMessageSerializer? serializer) where TResponse : ApiMessage;
|
||||||
|
|
||||||
Task<ApiResponse> SendRequest(string route, ApiMessage? message);
|
public virtual Task<ApiResponse> SendRequest(string route)
|
||||||
|
{
|
||||||
|
return SendRequest(route, HttpMethod.Post, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
Task<ApiResponse> SendRequest(string route, HttpMethod method, ApiMessage? message);
|
public virtual Task<ApiResponse> SendRequest(string route, HttpMethod method)
|
||||||
|
{
|
||||||
|
return SendRequest(route, method, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
Task<ApiResponse> SendRequest(string route, HttpMethod method, ApiMessage? message, IApiMessageSerializer? serializer);
|
public virtual Task<ApiResponse> SendRequest(string route, HttpMethod method, IDictionary<string, object>? @params)
|
||||||
|
{
|
||||||
|
return SendRequest(route, method, null, @params, null);
|
||||||
|
}
|
||||||
|
|
||||||
Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route) where TResponse : ApiMessage;
|
public virtual Task<ApiResponse> SendRequest(string route, ApiMessage? message)
|
||||||
|
{
|
||||||
|
return SendRequest(route, HttpMethod.Post, message, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method) where TResponse : ApiMessage;
|
public virtual Task<ApiResponse> SendRequest(string route, HttpMethod method, ApiMessage? message)
|
||||||
|
{
|
||||||
|
return SendRequest(route, method, message, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, ApiMessage? message) where TResponse : ApiMessage;
|
public virtual Task<ApiResponse> SendRequest(string route, HttpMethod method, ApiMessage? message, IDictionary<string, object>? @params)
|
||||||
|
{
|
||||||
|
return SendRequest(route, method, message, @params, null);
|
||||||
|
}
|
||||||
|
|
||||||
Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, ApiMessage? message) where TResponse : ApiMessage;
|
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route) where TResponse : ApiMessage
|
||||||
|
{
|
||||||
|
return SendRequest<TResponse>(route, HttpMethod.Post, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, ApiMessage? message, IApiMessageSerializer? serializer) where TResponse : ApiMessage;
|
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method) where TResponse : ApiMessage
|
||||||
|
{
|
||||||
|
return SendRequest<TResponse>(route, method, null, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, IDictionary<string, object>? @params) where TResponse : ApiMessage
|
||||||
|
{
|
||||||
|
return SendRequest<TResponse>(route, method, null, @params, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, ApiMessage? message) where TResponse : ApiMessage
|
||||||
|
{
|
||||||
|
return SendRequest<TResponse>(route, HttpMethod.Post, message, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, ApiMessage? message) where TResponse : ApiMessage
|
||||||
|
{
|
||||||
|
return SendRequest<TResponse>(route, method, message, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public virtual Task<ApiResponse<TResponse>> SendRequest<TResponse>(string route, HttpMethod method, ApiMessage? message, IDictionary<string, object>? @params) where TResponse : ApiMessage
|
||||||
|
{
|
||||||
|
return SendRequest<TResponse>(route, method, message, @params, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user