Plinth.HttpApiClient
1.7.1
Prefix Reserved
dotnet add package Plinth.HttpApiClient --version 1.7.1
NuGet\Install-Package Plinth.HttpApiClient -Version 1.7.1
<PackageReference Include="Plinth.HttpApiClient" Version="1.7.1" />
paket add Plinth.HttpApiClient --version 1.7.1
#r "nuget: Plinth.HttpApiClient, 1.7.1"
// Install Plinth.HttpApiClient as a Cake Addin #addin nuget:?package=Plinth.HttpApiClient&version=1.7.1 // Install Plinth.HttpApiClient as a Cake Tool #tool nuget:?package=Plinth.HttpApiClient&version=1.7.1
README
Plinth.HttpApiClient
HTTP Api Client framework built on MS HttpClient
Adds logging and tracing to HttpClient based API clients.
There are two supported approaches to building clients, autogenerated clients and manually built clients.
Auto generating clients with nswag
- install nodejs at least 12+
npm install -g nswag
- run this powershell, substituting the link to the swagger spec
$targetServiceSwaggerUrl = "{url or path to openapi spec}"
$targetServiceName = "{client class name}"
$namespace = "{client namespace}"
$nswagParams = @(
'openapi2csclient',
'/runtime:net80',
"/input:\`"${targetServiceSwaggerUrl}\`"",
"/classname:${targetServiceName}Client",
"/namespace:${namespace}",
"/output:${targetServiceName}Client.cs",
'/operationGenerationMode:SingleClientFromOperationId',
'/generateClientInterfaces:true',
'/injectHttpClient:true',
'/useBaseUrl:false',
'/disposeHttpClient:false',
'/generateOptionalParameters:true'
'/exceptionClass:NSwagException',
'/generateExceptionClasses:true',
'/parameterDateTimeFormat:o',
'/generateNullableReferenceTypes:true',
'/excludedParameterNames:X-Plinth-Auth'
)
nswag @nswagParams | Out-Host
Documentation for configuration options: https://github.com/RicoSuter/NSwag/wiki/NSwag-Configuration-Document
Also available using `nswag help openapi2csclient
Register the client during Startup
services.AddHttpApiHandlerClient<INSwagClient, NSwagClient>(
"NSwagClient",
configureClient: c =>
{
c.BaseAddress = new Uri("http://localhost:5000");
});
Manually building clients
Build a manual api client by deriving from BaseHttpApiClient
and implementing API methods using HttpRequestMessage
extensions. Example below:
public class MyClient : BaseHttpApiClient
{
public MyClient(HttpClient client) : base("MyApi", client)
{
}
public async Task<ModelObject?> GetThing(int parameter)
{
return await HttpGet("/api/values/thing")
.AddQueryParameter("param", parameter)
.ExecuteAsync<ModelObject>();
}
public async Task<ModelObject?> CreateThing(ModelObject modelObject)
{
return await HttpPost("/api/values/thing")
.SetJsonBody(modelObject)
.SetAuthorization("myApiToken")
.ExecuteAsync<ModelObject>();
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. |
-
net6.0
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Http (>= 9.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.0)
- Microsoft.SourceLink.Bitbucket.Git (>= 1.1.1)
- Plinth.Common (>= 1.7.1)
- Plinth.HttpApiClient.Common (>= 1.7.1)
- Plinth.Serialization (>= 1.7.1)
- System.Text.Json (>= 9.0.0)
-
net8.0
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Http (>= 9.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.0)
- Microsoft.SourceLink.Bitbucket.Git (>= 1.1.1)
- Plinth.Common (>= 1.7.1)
- Plinth.HttpApiClient.Common (>= 1.7.1)
- Plinth.Serialization (>= 1.7.1)
- System.Text.Json (>= 9.0.0)
-
net9.0
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.0)
- Microsoft.Extensions.Http (>= 9.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.0)
- Microsoft.SourceLink.Bitbucket.Git (>= 1.1.1)
- Plinth.Common (>= 1.7.1)
- Plinth.HttpApiClient.Common (>= 1.7.1)
- Plinth.Serialization (>= 1.7.1)
- System.Text.Json (>= 9.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Plinth.HttpApiClient:
Package | Downloads |
---|---|
Plinth.HttpApiClient.Polly
Polly extensions for Plinth.HttpApiClient |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.7.1 | 127 | 12/12/2024 |
1.7.0 | 129 | 11/12/2024 |
1.6.6 | 274 | 11/8/2024 |
1.6.5 | 479 | 8/31/2024 |
1.6.4 | 449 | 8/2/2024 |
1.6.3 | 1,189 | 5/15/2024 |
1.6.2 | 380 | 2/16/2024 |
1.6.1 | 2,606 | 1/5/2024 |
1.6.0 | 226 | 11/30/2023 |
1.5.10-b186.aca976b4 | 75 | 11/30/2023 |
1.5.9 | 169 | 11/29/2023 |
1.5.9-b174.64153841 | 78 | 11/23/2023 |
1.5.9-b172.dfc6e7bd | 69 | 11/17/2023 |
1.5.9-b171.4e2b92e2 | 78 | 11/4/2023 |
1.5.8 | 2,734 | 10/23/2023 |
1.5.7 | 5,316 | 7/31/2023 |
1.5.6 | 12,589 | 7/13/2023 |
1.5.5 | 253 | 6/29/2023 |
1.5.4 | 1,078 | 3/7/2023 |
1.5.3 | 325 | 3/3/2023 |
1.5.2 | 853 | 1/11/2023 |
1.5.2-b92.7c961f5f | 125 | 1/11/2023 |
1.5.0 | 635 | 11/9/2022 |
1.5.0-b88.7a7c20cd | 111 | 11/9/2022 |
1.4.7 | 5,188 | 10/20/2022 |
1.4.6 | 836 | 10/17/2022 |
1.4.5 | 816 | 10/1/2022 |
1.4.4 | 810 | 8/16/2022 |
1.4.3 | 711 | 8/2/2022 |
1.4.2 | 767 | 7/19/2022 |
1.4.2-b80.7fdbfd04 | 132 | 7/19/2022 |
1.4.2-b74.acaf86f5 | 122 | 6/15/2022 |
1.4.1 | 1,026 | 6/13/2022 |
1.4.0 | 796 | 6/6/2022 |
1.3.8 | 2,645 | 4/12/2022 |
1.3.7 | 738 | 3/21/2022 |
1.3.6 | 706 | 3/17/2022 |
1.3.6-b67.ca5053f3 | 138 | 3/16/2022 |
1.3.6-b66.4a9683e6 | 131 | 3/16/2022 |
1.3.5 | 781 | 2/23/2022 |
1.3.4 | 953 | 1/20/2022 |
1.3.3 | 694 | 12/29/2021 |
1.3.2 | 605 | 12/11/2021 |
1.3.1 | 514 | 11/12/2021 |
1.3.0 | 486 | 11/8/2021 |
1.2.3 | 1,687 | 9/22/2021 |
1.2.2 | 798 | 8/20/2021 |
1.2.1 | 656 | 8/5/2021 |
1.2.0 | 2,166 | 8/1/2021 |
1.2.0-b37.a54030b9 | 164 | 6/24/2021 |
1.1.6 | 6,314 | 3/22/2021 |
1.1.5 | 1,642 | 3/9/2021 |
1.1.4 | 2,745 | 2/27/2021 |
1.1.3 | 1,274 | 2/17/2021 |
1.1.2 | 1,267 | 2/12/2021 |
1.1.1 | 1,547 | 2/1/2021 |
1.1.0 | 1,319 | 12/16/2020 |
1.1.0-b27.b66c309b | 287 | 11/15/2020 |
1.0.12 | 3,509 | 10/18/2020 |
1.0.11 | 1,351 | 10/6/2020 |
1.0.10 | 1,408 | 9/30/2020 |
1.0.9 | 1,466 | 9/29/2020 |
1.0.8 | 1,497 | 9/26/2020 |
1.0.7 | 1,464 | 9/19/2020 |
1.0.6 | 1,425 | 9/3/2020 |
1.0.5 | 1,573 | 9/2/2020 |
1.0.4 | 1,734 | 9/1/2020 |
1.0.3 | 1,350 | 9/1/2020 |
1.0.2 | 1,349 | 8/29/2020 |
1.0.1 | 1,395 | 8/29/2020 |
1.0.0 | 1,408 | 8/29/2020 |
1.0.0-b1.c22f563d | 249 | 8/28/2020 |
net9.0 support