Giter Club home page Giter Club logo

restapiconfigurationprovider's Introduction

RestApiConfigurationProvider

RestApiConfigurationProvider is a .NET NuGet package that provides a simple and effective way to interact with Configuration REST API service.
It offers a service SDK client (IConfigurationRestApiClient) interface and RestApiConfigurationProvider.

Features

  • Easy to set up client interface for Configuration REST API (IConfigurationRestApiClient).
  • Seamless integration with .NET Core microservices for retrieving configuration in transparent way.

Getting Started

Usage

TL;DR

Package included working demo application where you can find fully configured example: TODO: Add link to demo project Program.cs

Configuration Example

Add the following configuration to your appsettings.json file, adjusting the queue names and settings as necessary:

{
    "ConfigurationHttpClientSettings": {
        "BaseUrl": "https://restapi.com/api",
        // Or define Environment Variable with name: `ConfigurationHttpClientSettings__ApiKey`
        "ApiKey": "abababab-abab-abab-abab-abababababab",
        "HttpClientTimeoutSeconds": "10"
    },
    "RestApiConfigurationProvider": {
        "CacheDurationMinutes": "60",
        "CacheKeyPrefix": "configuration_cache_prefix",
        "ConfigurationKeys": [
            "something-not-exist",
            "auth",
            "playback"
        ]
    }
}

In Program.cs

In your Program.cs, configure the services as follows:

public static Task Main(string[] args)
{
    var preliminaryConfig = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .AddJsonFile("appsettings.package.json")
        .AddEnvironmentVariables()
        .Build();

    var loggerFactory = GetFactory();
    var distributedCache = new MemoryDistributedCache(Options.Create(new MemoryDistributedCacheOptions()), loggerFactory);

    var appStartServiceCollection = new ServiceCollection()
        .AddSingleton(loggerFactory)
        .AddConfigurationRestApiClient(preliminaryConfig)
        .AddSingleton<IDistributedCache>(distributedCache);


    var host = new WebHostBuilder()
        ...
        .ConfigureServices(services =>
        {
            // Inside the ConfigureServices method, add all the services from the appStartServiceCollection to the web host's services.
            // Optionally to reuse created instances in other part of applicateion
            foreach (var serviceDescriptor in appStartServiceCollection)
            {
                services.Add(serviceDescriptor);
            }
        })
        .ConfigureAppConfiguration((context, builder) =>
        {
            var restApiHttpClient = appStartServiceProvider.GetRequiredService<IRestApiHttpClient>();
            var configurationProviderSettings = preliminaryConfig
                .GetSection(RestApiConfigurationProviderSettings.SectionName)
                .Get<RestApiConfigurationProviderSettings>();

            builder.AddRestApiConfigurationSource(loggerFactory, distributedCache, restApiHttpClient, configurationProviderSettings);
        })
        ...
        .Build();
}

Initial Setup

Begin by constructing a preliminary configuration using ConfigurationBuilder. This loads the settings from:

  • A JSON file named appsettings.json which contains general application settings.
  • A JSON file named appsettings.package.json which may include package-specific settings.
  • Environment variables which can override settings for different environments.
var preliminaryConfig = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appsettings.json")
    .AddJsonFile("appsettings.package.json")
    .AddEnvironmentVariables()
    .Build();

Logger and Distributed Cache, Service Collection and Provider

Next, create a LoggerFactory and a IDistributedCache instance. These will be used for logging and caching purposes respectively.

Create a ServiceCollection, add the loggerFactory,

  • register in DI the IConfigurationRestApiClient ,
  • register in DI the IDistributedCache that will share configuration across multiple nodes(app instances)

as singletons to the service collection.

And build a service provider from the service collection which will be used to resolve services before application startup.

var loggerFactory = GetFactory();
var distributedCache = new MemoryDistributedCache(Options.Create(new MemoryDistributedCacheOptions()), loggerFactory);

var appStartServiceCollection = new ServiceCollection()
    .AddSingleton(loggerFactory)
    .AddConfigurationRestApiClient(preliminaryConfig)
    .AddSingleton<IDistributedCache>(distributedCache);

var appStartServiceProvider = appStartServiceCollection.BuildServiceProvider();

Configuration Provider Setup

  • Obtain the required services like IRestApiHttpClient from the service provider.
  • Retrieve configuration provider settings from the preliminary configuration
  • Call AddRestApiConfigurationSource to build ConfigurationSource and create RestApiConfigurationProvider instance.
.ConfigureAppConfiguration((context, builder) =>
{
    var restApiHttpClient = appStartServiceProvider.GetRequiredService<IRestApiHttpClient>();
    var configurationProviderSettings = preliminaryConfig
        .GetSection(RestApiConfigurationProviderSettings.SectionName)
        .Get<RestApiConfigurationProviderSettings>();

    builder.AddRestApiConfigurationSource(loggerFactory, distributedCache, restApiHttpClient, configurationProviderSettings);
})

restapiconfigurationprovider's People

Contributors

petttro avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.