Helsedir.Hint.Kodeverk.Client 3.0.9

dotnet add package Helsedir.Hint.Kodeverk.Client --version 3.0.9
                    
NuGet\Install-Package Helsedir.Hint.Kodeverk.Client -Version 3.0.9
                    
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="Helsedir.Hint.Kodeverk.Client" Version="3.0.9" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Helsedir.Hint.Kodeverk.Client" Version="3.0.9" />
                    
Directory.Packages.props
<PackageReference Include="Helsedir.Hint.Kodeverk.Client" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Helsedir.Hint.Kodeverk.Client --version 3.0.9
                    
#r "nuget: Helsedir.Hint.Kodeverk.Client, 3.0.9"
                    
#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.
#:package Helsedir.Hint.Kodeverk.Client@3.0.9
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Helsedir.Hint.Kodeverk.Client&version=3.0.9
                    
Install as a Cake Addin
#tool nuget:?package=Helsedir.Hint.Kodeverk.Client&version=3.0.9
                    
Install as a Cake Tool

HINT Felles Kodeverk

Inneholder modeller for Kodeverket og en klient for å bruke sammen med HttpClientFactory. Går mot v2 av HINT Kodeverk.

Klienten krever EntraId for å kunne hente kodeverk. Støtte for det kan settes opp med pakken Helsedir.Hint.Grunnmur.Klienter.EntraId / Hdir.Hint.Grunnmur.Klienter.EntraId hvis man ikke vil håndtere det selv.

Table of Contents

Innledning

Felles Kodeverk er et enkelt REST API for lagring og søk av både egendefinert samt kopier av eksterne kodeverk. Det består av 4 ressurstyper:

  1. Kodeverk: Beskriver et kodeverk som identifiseres vha. en unik id (OID).
  2. Element: Beskriver en kode som inngår i et bestemt kodeverk.
  3. Relasjonsgruppe: Beskriver en relasjon mellom 2 kodeverk (kan være samme kodeverk) og fungerer som gruppering for elementrelasjoner.
  4. Relasjon: Elementrelasjoner inngår i 1 relasjonsgruppe og beskriver relasjonen mellom 2 elementer. Elementene må tilhøre de respektive kodeverkene (fra/til) som relasjonsgruppen beskriver.

forenklet-klassediagram

Hdir.Hint.Kodeverk.Client

Kodeverk.Client er en nuget pakke som er ment å gjøre det enklere og raskere å ta i bruk Felles Kodeverk Den inneholder C# klasser for serialisering\deserialisering til og fra json samt en hjelpe-klient som benytter HttpClient for å interaktere med Kodeverk APIet. Prosjektet targeter .NET standard 2.0 og har kun avhengighet til Microsoft.AspNet.WebApi.Client.

For brukere som trenger å tilpasse oppførsel til HTTP Request\Response til klienten kan dette gjøres vha. DelegatingHandler slik som f.eks en egenlaget CorrelationIdDelegatingHandler. Hvis det er ønskelig å endre oppførselen til selve klienten så er alle metodene virtual og kan overskrives ved å arve fra KodeverkClient, se eksempel på caching.

Get started

Klienten er ment å brukes sammen med HttpClientFactory og Dependency-Injection (men dette er ikke nødvendig). Kodeverk-APIet støtter både filtrering, sortering, paginering og oversetting, men for de fleste forsystemer vil behovet kun være å hente alle koder som inngår i et spesifisert kodeverk, påfølgende kode er et eksempel på dette.

using Hdir.Hint.Kodeverk;
...

// Registrerer klienten i Dependency-Injection. 
public static void AddKodeverkClient(IServiceCollection services)
{
    services
        .AddHttpClient<IKodeverkClient, KodeverkClient>()
        .ConfigureHttpClient(client =>
        {
            client.BaseAddress = new Uri("https://hint-api-st.test.helsedir.no/intern/kodeverk/apimv2");
            // APIM subscription key
            client.DefaultRequestHeaders.Add(HttpClientConstants.HeaderApimSubscriptionKey, options.ApimSubscriptionKey);
        })
        // Autentisering/Autorisering vha HelseId.
        .AddHttpMessageHandler<TokenSetterDelegatingHandler>();
        // EntraId-handler fra pakken Hdir.Hint.Grunnmur.Klienter.EntraId:
        // .AddHttpMessageHandler<EntraIdHandler>();
}

public class ExampleClass
{
    private readonly IKodeverkClient _client;

    public ExampleClass(IKodeverkClient client)
    {
        _client = client;
    }

    // Eksempel der vi kun er interessert i å hente alle kodene i et kodeverk.
    public async Task<string[]> GetCodesAsync(string kodeverkId)
    {
        var elements = await _client.AllElementsAsync(kodeverkId);
        var codes = elements.Select(x => x.Kode).ToArray();

        return codes;
    }
}

Get started: Advanced

Følgende er et mer komplekst eksempel der endepunktet til HINT hentes fra konfigurasjon og det benyttes en DelegationHandler som beriker HTTP-requestene med en x-Correlation-ID header. CorrelationIdDelegatingHandler er her bare brukt som et eksempel og finnes ikke i Nugeten, den må implementeres av brukerene selv dersom de ønsker den funksjonaliteten.

public static void AddKodeverkClient(this IServiceCollection services)
{
    services
        .AddOptions<MyConfig>()
        .Configure<IConfiguration>((ops, config) => config.Bind("Integrations:Hint", ops));

    services
        .AddHttpClient<IKodeverkClient, KodeverkClient>()
        .ConfigureHttpClient((sp, client) =>
        {
            var options = sp.GetRequiredService<IOptions<MyConfig>>().Value;
            client.BaseAddress = new Uri($"{options.Endpoint}");
            // APIM subscription key
            client.DefaultRequestHeaders.Add(HttpClientConstants.HeaderApimSubscriptionKey, options.ApimSubscriptionKey);   
        })
        // Autentisering/Autorisering vha EntraId.
        .AddHttpMessageHandler<TokenSetterDelegatingHandler>()
        .AddHttpMessageHandler<CorrelationIdDelegatingHandler>()
        .AddHttpMessageHandler<LoggingDelegatingHandler>()
        // .AddHttpMessageHandler<EntraIdHandler>() // EntraId-handler fra pakken Hdir.Hint.Grunnmur.Klienter.EntraId
        .AddTransientHttpErrorPolicy(x => x.WaitAndRetryAsync(new[] { TimeSpan.FromSeconds(1) })); 
}

Caching

Et kodeverk endrer seg sjelden og tåler å ha en forsinkelse før eventuelle endringer reflekteres, derfor er dette en god kandidat for aggressiv caching. Kodeverk.Client Nuget pakken inneholder ikke en ferdig cache-implementasjon siden behovene til forsystemer vil være forskjellige.

Følgende er et eksempel på hvordan et forsystem kan utvide KodeverkClient til å bruke Microsoft sin MemoryCache. Merk at ElementApiQuery i dette eksempelet blir brukt som Cache-Key; det fungerer fordi ElementApiQuery implementerer IEquatable. Alle klassene i Nuget pakken implementerer IEquatable + noen egenlagde grensensitt: IDeepComparable og IDeepCopyable.

public class CachedKodeverkHttpClient : KodeverkClient
{
    private readonly IMemoryCache _cache;

    public CachedKodeverkHttpClient(
        HttpClient httpClient,
        IMemoryCache cache)
        : base(httpClient)
    {
        _cache = cache;
    }

    public override Task<PagedApiModel<ElementApiModel>> SearchElementsAsync(
        ElementApiQuery query = null,
        CancellationToken ct = default(CancellationToken))
        => _cache.GetOrCreateAsync(query, entry =>
        {
            entry.SetAbsoluteExpiration(TimeSpan.FromDays(1));
            return base.SearchElementsAsync(query, ct);
        });
}

...

// Registrerer og brukes på vanlig måte.
public static void AddKodeverkClient(IServiceCollection services)
{
    services
        .AddHttpClient<IKodeverkClient, CachedKodeverkHttpClient>()
    ...
}
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  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.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos 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
3.0.9 84 9/24/2025

- v3: Oppdatert til v2 av HINT Kodeverk som krever EntraId