Skip to content

Commit 60777fa

Browse files
Improve Admin API and Consumer API SDKs (#633)
* refactor: specify api version in each route * feat: factory methods for consumer api Client * refactor: improve code quality * refactor: improve code quality * feat: add factory methods for Admin API SDK * refactor: introduce ConsumerApiEndpoint * refactor: use apiVersion on each endpoint instead of in http client * refactor: get rid of Configuration * chore: make method public * chore: fix namespace * chore: remove redundant parantheses --------- Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent f470de8 commit 60777fa

38 files changed

+476
-160
lines changed

AdminApi.Sdk/Endpoints/Common/XsrfAndApiKeyAuthenticator.cs renamed to AdminApi.Sdk/Authentication/XsrfAndApiKeyAuthenticator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Diagnostics.CodeAnalysis;
22
using Backbone.BuildingBlocks.SDK.Endpoints.Common;
33

4-
namespace Backbone.AdminApi.Sdk.Endpoints.Common;
4+
namespace Backbone.AdminApi.Sdk.Authentication;
55

66
public class XsrfAndApiKeyAuthenticator : IAuthenticator
77
{
@@ -40,7 +40,7 @@ private async Task<string> GetCookie()
4040
[MemberNotNull(nameof(_xsrfToken), nameof(_xsrfCookie))]
4141
private async Task RefreshToken()
4242
{
43-
HttpRequestMessage request = new(HttpMethod.Get, "xsrf");
43+
HttpRequestMessage request = new(HttpMethod.Get, "api/v1/xsrf");
4444
request.Headers.Add("X-API-KEY", _apiKey);
4545

4646
#pragma warning disable CS8774 // This warning ("Member must have a non-null value when exiting") must currently be disabled. (see https://github.com/dotnet/csharplang/discussions/ for details)

AdminApi.Sdk/Client.cs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
1-
using Backbone.AdminApi.Sdk.Endpoints.ApiKeyValidation;
1+
using System.Text.Json;
2+
using Backbone.AdminApi.Sdk.Authentication;
3+
using Backbone.AdminApi.Sdk.Endpoints.ApiKeyValidation;
24
using Backbone.AdminApi.Sdk.Endpoints.Clients;
3-
using Backbone.AdminApi.Sdk.Endpoints.Common;
45
using Backbone.AdminApi.Sdk.Endpoints.Identities;
56
using Backbone.AdminApi.Sdk.Endpoints.Logs;
67
using Backbone.AdminApi.Sdk.Endpoints.Metrics;
78
using Backbone.AdminApi.Sdk.Endpoints.Relationships;
89
using Backbone.AdminApi.Sdk.Endpoints.Tiers;
910
using Backbone.BuildingBlocks.SDK.Endpoints.Common;
11+
using Backbone.Tooling.JsonConverters;
1012

1113
namespace Backbone.AdminApi.Sdk;
1214

1315
public class Client
1416
{
15-
public Client(Configuration config)
17+
private Client(HttpClient httpClient, string apiKey)
1618
{
17-
var httpClient = new HttpClient { BaseAddress = new Uri(config.BaseUrl) };
18-
var authenticator = new XsrfAndApiKeyAuthenticator(config.ApiKey, httpClient);
19-
var endpointClient = new EndpointClient(httpClient, authenticator, config.JsonSerializerOptions);
19+
var authenticator = new XsrfAndApiKeyAuthenticator(apiKey, httpClient);
20+
21+
var jsonSerializerOptions = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
22+
jsonSerializerOptions.Converters.Add(new UrlSafeBase64ToByteArrayJsonConverter());
23+
24+
var endpointClient = new EndpointClient(httpClient, authenticator, jsonSerializerOptions);
2025

2126
ApiKeyValidation = new ApiKeyValidationEndpoint(endpointClient);
2227
Clients = new ClientsEndpoint(endpointClient);
@@ -34,4 +39,14 @@ public Client(Configuration config)
3439
public MetricsEndpoint Metrics { get; }
3540
public RelationshipsEndpoint Relationships { get; }
3641
public TiersEndpoint Tiers { get; }
42+
43+
public static Client Create(string baseUrl, string apiKey)
44+
{
45+
return Create(new HttpClient { BaseAddress = new Uri(baseUrl) }, apiKey);
46+
}
47+
48+
public static Client Create(HttpClient httpClient, string apiKey)
49+
{
50+
return new Client(httpClient, apiKey);
51+
}
3752
}

AdminApi.Sdk/Configuration.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using Backbone.BuildingBlocks.SDK.Endpoints.Common;
2+
3+
namespace Backbone.AdminApi.Sdk.Endpoints;
4+
5+
public abstract class AdminApiEndpoint : Endpoint
6+
{
7+
protected const string API_VERSION = "v1";
8+
9+
protected AdminApiEndpoint(EndpointClient client) : base(client)
10+
{
11+
}
12+
}

AdminApi.Sdk/Endpoints/ApiKeyValidation/ApiKeyValidationEndpoint.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55

66
namespace Backbone.AdminApi.Sdk.Endpoints.ApiKeyValidation;
77

8-
public class ApiKeyValidationEndpoint(EndpointClient client) : Endpoint(client)
8+
public class ApiKeyValidationEndpoint(EndpointClient client) : AdminApiEndpoint(client)
99
{
1010
public async Task<ApiResponse<ValidateApiKeyResponse>> ValidateApiKeyUnauthenticated(ValidateApiKeyRequest? request)
11-
=> await _client.PostUnauthenticated<ValidateApiKeyResponse>("ValidateApiKey", request);
11+
=> await _client.PostUnauthenticated<ValidateApiKeyResponse>($"api/{API_VERSION}/ValidateApiKey", request);
1212
}

AdminApi.Sdk/Endpoints/Clients/ClientsEndpoint.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,20 @@
66

77
namespace Backbone.AdminApi.Sdk.Endpoints.Clients;
88

9-
public class ClientsEndpoint(EndpointClient client) : Endpoint(client)
9+
public class ClientsEndpoint(EndpointClient client) : AdminApiEndpoint(client)
1010
{
11-
public async Task<ApiResponse<ListClientsResponse>> GetAllClients() => await _client.Get<ListClientsResponse>("Clients");
11+
public async Task<ApiResponse<ListClientsResponse>> GetAllClients() => await _client.Get<ListClientsResponse>($"api/{API_VERSION}/Clients");
1212

13-
public async Task<ApiResponse<ClientInfo>> GetClient(string id) => await _client.Get<ClientInfo>($"Clients/{id}");
13+
public async Task<ApiResponse<ClientInfo>> GetClient(string id) => await _client.Get<ClientInfo>($"api/{API_VERSION}/Clients/{id}");
1414

1515
public async Task<ApiResponse<CreateClientResponse>> CreateClient(CreateClientRequest request)
16-
=> await _client.Post<CreateClientResponse>("Clients", request);
16+
=> await _client.Post<CreateClientResponse>($"api/{API_VERSION}/Clients", request);
1717

1818
public async Task<ApiResponse<ClientInfo>> ChangeClientSecret(string id, ChangeClientSecretRequest request)
19-
=> await _client.Patch<ClientInfo>($"Clients/{id}/ChangeSecret", request);
19+
=> await _client.Patch<ClientInfo>($"api/{API_VERSION}/Clients/{id}/ChangeSecret", request);
2020

2121
public async Task<ApiResponse<ClientInfo>> UpdateClient(string id, UpdateClientRequest request)
22-
=> await _client.Put<ClientInfo>($"Clients/{id}", request);
22+
=> await _client.Put<ClientInfo>($"api/{API_VERSION}/Clients/{id}", request);
2323

24-
public async Task<ApiResponse<EmptyResponse>> DeleteClient(string id) => await _client.Delete<EmptyResponse>($"Clients/{id}");
24+
public async Task<ApiResponse<EmptyResponse>> DeleteClient(string id) => await _client.Delete<EmptyResponse>($"api/{API_VERSION}/Clients/{id}");
2525
}

AdminApi.Sdk/Endpoints/Identities/IdentitiesEndpoint.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,22 @@
66

77
namespace Backbone.AdminApi.Sdk.Endpoints.Identities;
88

9-
public class IdentitiesEndpoint(EndpointClient client) : Endpoint(client)
9+
public class IdentitiesEndpoint(EndpointClient client) : AdminApiEndpoint(client)
1010
{
1111
public async Task<ApiResponse<IndividualQuota>> CreateIndividualQuota(string address, CreateQuotaForIdentityRequest request)
12-
=> await _client.Post<IndividualQuota>($"Identities/{address}/Quotas", request);
12+
=> await _client.Post<IndividualQuota>($"api/{API_VERSION}/Identities/{address}/Quotas", request);
1313

1414
public async Task<ApiResponse<EmptyResponse>> DeleteIndividualQuota(string address, string quotaId)
15-
=> await _client.Delete<EmptyResponse>($"Identities/{address}/Quotas/{quotaId}");
15+
=> await _client.Delete<EmptyResponse>($"api/{API_VERSION}/Identities/{address}/Quotas/{quotaId}");
1616

17-
public async Task<ApiResponse<GetIdentityResponse>> GetIdentity(string address) => await _client.Get<GetIdentityResponse>($"Identities/{address}");
17+
public async Task<ApiResponse<GetIdentityResponse>> GetIdentity(string address) => await _client.Get<GetIdentityResponse>($"api/{API_VERSION}/Identities/{address}");
1818

1919
public async Task<ApiResponse<EmptyResponse>> UpdateIdentityTier(string address, UpdateIdentityTierRequest request)
20-
=> await _client.Put<EmptyResponse>($"Identities/{address}", request);
20+
=> await _client.Put<EmptyResponse>($"api/{API_VERSION}/Identities/{address}", request);
2121

2222
public async Task<ApiResponse<CreateIdentityResponse>> CreateIdentity(CreateIdentityRequest request)
23-
=> await _client.Post<CreateIdentityResponse>("Identities", request);
23+
=> await _client.Post<CreateIdentityResponse>($"api/{API_VERSION}", request);
2424

2525
public async Task<ApiResponse<StartDeletionProcessAsSupportResponse>> StartDeletionProcess(string address)
26-
=> await _client.Post<StartDeletionProcessAsSupportResponse>($"Identities/{address}/DeletionProcesses");
26+
=> await _client.Post<StartDeletionProcessAsSupportResponse>($"api/{API_VERSION}/Identities/{address}/DeletionProcesses");
2727
}

AdminApi.Sdk/Endpoints/Logs/LogsEndpoint.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Backbone.AdminApi.Sdk.Endpoints.Logs;
66

7-
public class LogsEndpoint(EndpointClient client) : Endpoint(client)
7+
public class LogsEndpoint(EndpointClient client) : AdminApiEndpoint(client)
88
{
9-
public async Task<ApiResponse<EmptyResponse>> CreateLog(LogRequest request) => await _client.Post<EmptyResponse>("Logs", request);
9+
public async Task<ApiResponse<EmptyResponse>> CreateLog(LogRequest request) => await _client.Post<EmptyResponse>($"api/{API_VERSION}/Logs", request);
1010
}

AdminApi.Sdk/Endpoints/Metrics/MetricsEndpoint.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace Backbone.AdminApi.Sdk.Endpoints.Metrics;
66

7-
public class MetricsEndpoint(EndpointClient client) : Endpoint(client)
7+
public class MetricsEndpoint(EndpointClient client) : AdminApiEndpoint(client)
88
{
9-
public async Task<ApiResponse<ListMetricsResponse>> GetAllMetrics() => await _client.Get<ListMetricsResponse>("Metrics");
9+
public async Task<ApiResponse<ListMetricsResponse>> GetAllMetrics() => await _client.Get<ListMetricsResponse>($"api/{API_VERSION}/Metrics");
1010
}

AdminApi.Sdk/Endpoints/Relationships/RelationshipsEndpoint.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@
44

55
namespace Backbone.AdminApi.Sdk.Endpoints.Relationships;
66

7-
public class RelationshipsEndpoint(EndpointClient client) : Endpoint(client)
7+
public class RelationshipsEndpoint(EndpointClient client) : AdminApiEndpoint(client)
88
{
99
public async Task<ApiResponse<ListRelationshipsResponse>> GetAllRelationships(PaginationFilter? pagination = null)
10-
=> await _client.Get<ListRelationshipsResponse>("Relationships", null, pagination);
10+
=> await _client.Get<ListRelationshipsResponse>($"api/{API_VERSION}/Relationships", null, pagination);
1111

1212
public async Task<ApiResponse<ListRelationshipsResponse>> GetAllRelationships(string participant, PaginationFilter? pagination = null) => await _client
13-
.Request<ListRelationshipsResponse>(HttpMethod.Get, "Relationships")
13+
.Request<ListRelationshipsResponse>(HttpMethod.Get, $"api/{API_VERSION}/Relationships")
1414
.Authenticate()
1515
.WithPagination(pagination)
1616
.AddQueryParameter("participant", participant)

0 commit comments

Comments
 (0)