Fonix.Extensions.ApiClient 1.0.1

dotnet add package Fonix.Extensions.ApiClient --version 1.0.1
NuGet\Install-Package Fonix.Extensions.ApiClient -Version 1.0.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Fonix.Extensions.ApiClient" Version="1.0.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Fonix.Extensions.ApiClient --version 1.0.1
#r "nuget: Fonix.Extensions.ApiClient, 1.0.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Fonix.Extensions.ApiClient as a Cake Addin
#addin nuget:?package=Fonix.Extensions.ApiClient&version=1.0.1

// Install Fonix.Extensions.ApiClient as a Cake Tool
#tool nuget:?package=Fonix.Extensions.ApiClient&version=1.0.1

Fonix APIs RestClient Extensions

This project extends functionality to the RestClient library by configuring the API endpoints from Fonix Telematics.

Note: version 0.2 introduces some breaking changes in how the APIs are registered. If you are migrating from 0.1.x please see migration notes.

Getting started

The first thing is to add the package reference

dotnet nuget add package Fonix.Extensions.ApiClient

Next, register the APIs RESTful client. Upon registering the required dependencies, an IApiRestClientBuilder instance is returned so that we can register the APIs we need.

IServiceCollection services = ... //

var builder = services.AddApiRestClient( options =>
{
    // if all requests are to use the same token, configure it here
    options.Token = "your-bearer-token";
} );

builder.AddCoreApi();

The extensions rely on the RestClient library, so to create a client for a specific library, we can use the IRestClientFactory extensions. For example:

public class MyClass
{
    private readonly IRestClient coreApi;
    private readonly IRestClient devicesApi;

    public MyClass( IRestClientFactory restClientFactory )
    {
        coreApi = restClientFactory.GetCoreApiClient();
        devicesApi = restClientFactory.GetDevicesApiClient();

        // if you prefer, you can also use the registered names
        coreApi = restClientFactory.CreateClient( ApiClientNames.Core )
    }
}

Extending endpoints

Something new that version 0.2 brought is the ability to extend the API with custom endpoints that aren't implemented in the library. There are a few different ways to do this, where the most direct one is to just add a custom endpoint with a name

IApiRestClientBuilder builder = ... //

builder.Add( "forms.fonixapis", "https://forms.fonixapis.com" );

A more complete approach would be to first extend the ApiOptions class.

internal class ExtendedApiOptions : ApiOptions
{
    public ExtendedApiOptions()
    {
        FormsUri = ExtendedApiClientEndpoints.Forms;
    }

    public string FormsUri { get; set; }

    public override void UseEnvironment( string name )
    {
        base.UseEnvironment( name );

        FormsUri = ExtendedApiClientEndpoints.Forms.Replace( ".fonixapis.", $".{name}.fonixapis." );
    }
}

We can then create an extension for the typed builder

internal static class ExtendedApiServiceExtensions
{
    public static IApiRestClientBuilder<ExtendedApiOptions> AddFormsApi( this IApiRestClientBuilder<ExtendedApiOptions> builder )
    {
        builder.Add( ExtendedApiClientNames.Forms, builder.Options.FormsUri );

        return ( builder );
    }
}

And finally, we use the typed builder instead of the default one, where we can use our extensions.

builder.Services.AddApiRestClient<ExtendedApiOptions>( options =>
{
    // ...
} )
.AddCoreApi()   // we can still add our Core API endpoint
.AddFormsApi(); // and our custom API endpoint

You can have a look at the examples folder in this repository for a complete walkthrough.

Migration notes

If you are upgrading from 0.1.x to 0.2, you need to keep in mind that the AddApiRestClient now returns a builder and that you need to add in the APIs you need.

So if you intend to use the Core API only, your code will change from this

IServiceCollection services = ... //

services.AddApiRestClient( options =>
{
    // if all requests are to use the same token, configure it here
    options.Token = "your-bearer-token";
} );

to this

services.AddApiRestClient( options =>
{
    // if all requests are to use the same token, configure it here
    options.Token = "your-bearer-token";
} )
.AddCoreApi();
Product 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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.1 321 1/25/2023
1.0.0 259 1/25/2023
0.2.0 412 5/23/2022
0.2.0-preview-1 130 5/20/2022
0.1.2 410 4/12/2022
0.1.0 382 3/25/2022