Knihovny
Pro vývojáře je k dispozici SDK pro C# prostřednictvím:
- Dokumentace Redoc, kde jsou ukázky použití u jednotlivých endpointů.
- NuGet package na nuget.org a to: klient a DTO.
Použití klienta/klientů z SDK je možné několika způsoby:
- Bez IoC kontejneru:
var client = ClientProvider.CreateClient().WithApiKey("your-api-key").Build();upozornění Při konzumaci klienta bez IoC kontejneru doporučujeme vytvořeného klienta cachovat a následně používat ideálně jako jednu instanci (singleton) Microsoft HttpClient guidelines.
- S IoC kontejnerem založeným na IServiceCollection:
serviceCollection.AddMphOpenApiClient().WithApiKey("your-api-key").Build();info Při konzumaci klienta s IoC kontejnerem je možné injectovat samotný
MphApiClientči jednotlivé klienty podle typu např.IBanksClient.
Oba dva způsoby vytvoření/přidání klienta mají různé možnosti auth vůči API:
- API klíčem přes metodu
WithApiKey("your-api-key"). - Předáním clientId a clientSecret, kde se o získání auth tokenu postará SDK
WithClientCredentials("your-clientId", "your-clientSecret"). - Přenechání zodpovědnosti získávání auth tokenu na konzumentovi SDK. V případě bez IoC
WithBearerToken(async token => await GetToken()). S IoC je k dispozici ServiceProviderWithBearerToken(async (provider, token) => await provider.GetRequiredService<TokenGetter>().GetToken()).
Sestavení je nutné dokončit zavoláním metody Build(). Tato metoda přijímá volitelný objekt ClientOptions, přes který je možné upravit chování klienta. Konstruktor objektu nastavuje výchozí hodnoty takto ClientOptions(bool usePredefinedPolicies = true, HttpMessageHandler? innerHandler = null, TimeSpan? timeout = null), kde:
bool usePredefinedPolicies = truenastavený na hodnotutruepřidá WaitAndRetry policy společně se CircuitBreaker policy, při použití s IoC kontejnerem, v nímž je zaregistrována nějaká implementaceILoggerFactory, budou "chyby" zaznamenány do logů.HttpMessageHandler? innerHandler = nullpřes tento parametr je možné použít vlastníHttpClientHandler, který je zodpovědný za samotné odeslání požadavku. Např. při použití v mobilním prostředí, kde výchozí .NETHttpClientHandlermůže být výkonově nedostatečný, je možné jej nahradit za jinou implementaci.TimeSpan? timeout = nullnastavení timeoutu požadavku. Kde výchozí hodnota je převzatá z .NET, tj. 100 sekund.
tip
Objekt MphApiClient má veřejnou metodu public TClient FindClient<TClient>(), přes kterou je možné získat instanci specifického klienta dynamicky bez nutnosti použít klienta definovaného v property. Např. var getClient = client.FindClient<IGetClient<TType>>().