Konfigurimi
Çdo opsion i klientit, çfarë lexon nga mjedisi dhe çfarë refuzon.
Opsionet
using var http = new HttpClient(); var client = new OpenEmailClient(new OpenEmailOptions{ ApiKey = Environment.GetEnvironmentVariable("OPENEMAIL_API_KEY"), BaseUrl = "https://api.openemail.uk", Timeout = TimeSpan.FromSeconds(30), MaxRetries = 2, HttpClient = http, Headers = { ["X-Team"] = "billing" },}); Console.WriteLine($"{client.Mode} {client.Raw.BaseUrl}");| Opsioni | Çfarë bën |
|---|---|
| ApiKey | Çelësi API i hapësirës së punës, që fillon me oe_live_ ose oe_test_. |
| AccessToken | Një token aksesi OAuth, për një aplikacion që e ka lidhur një person. Jepni një çelës ose një token, jo të dy. |
| AccessTokenProvider | Një funksion që kthen tokenin e aksesit. Ekzekutohet para çdo kërkese, prandaj është vendi ku rinovohet një token. |
| BaseUrl | Origjina e API-së. Një hosti të thjeshtë si localhost:2222 i shtohet skema. |
| HttpClient | HttpClient që aplikacioni juaj e ka tashmë, si një nga IHttpClientFactory ose një me një trajtues testi. Klienti nuk e çliron kurrë. |
| Timeout | Sa mund të zgjasë një përpjekje. Parazgjedhja është 30 sekonda, TimeSpan.Zero e çaktivizon, dhe ngarkimet presin të paktën dhjetë minuta. |
| MaxRetries | Sa herë riprovohet një kërkesë e dështuar. Parazgjedhja është 2, dhe 0 dërgon një herë. |
| UserAgent | Zëvendëson kokën User-Agent, që është openemail-dotnet/ dhe versioni. |
| Headers | Koka që i shtohen çdo kërkese. |
Gjithçka që e lini jashtë lexohet nga mjedisi: OPENEMAIL_API_KEY, pastaj OPENEMAIL_ACCESS_TOKEN, dhe OPENEMAIL_BASE_URL. client.Mode tregon nëse çelësi është një çelës live apo test.
Anulimi dhe afatet kohore
Çdo metodë merr së fundi një CancellationToken. Anulimi i tij e ndal thirrjen menjëherë, bashkë me riprovimet, dhe hedh OperationCanceledException, ndërsa Timeout kufizon çdo përpjekje.
using var deadline = new CancellationTokenSource(TimeSpan.FromSeconds(10)); var thread = await client.Threads.GetAsync("CAHk7pQ2x9LmZ4-mail.example.com", cancellationToken: deadline.Token); Console.WriteLine(thread["messageCount"]);Opsionet në një thirrje
Parametrat e kërkimit dhe cilësimet e thirrjes janë argumente me emër nën emrat e API-së, si limit:, cursor: dhe idempotencyKey:. Çdo metodë merr apiKey: për të vepruar me një çelës tjetër vetëm për atë thirrje, kështu që një proces mund t'u shërbejë disa hapësirave të punës me një klient të vetëm.
var page = await client.Emails.ListAsync( status: new[] { "failed", "bounced" }, limit: 50, apiKey: Environment.GetEnvironmentVariable("OTHER_WORKSPACE_KEY")); Console.WriteLine($"{page.Count} {page.HasMore}");Tokenat e qasjes OAuth
Një aplikacion që një person e ka lidhur me OAuth mban një token aksesi në vend të një çelësi API. Jepeni si AccessToken, ose jepni AccessTokenProvider dhe rinovojeni tokenin aty kur është afër skadimit, kështu që klienti nuk ka nevojë të rindërtohet kurrë.
var current = "token-from-your-oauth-flow"; var client = new OpenEmailClient(new OpenEmailOptions{ AccessTokenProvider = _ => Task.FromResult(current),}); var me = await client.Me.GetAsync(); Console.WriteLine(me["workspaceId"]);ASP.NET Core
Regjistroni një klient të vetëm për gjithë aplikacionin. Ai nuk mban asnjë lidhje të vetën për të çliruar, prandaj singleton është jetëgjatësia e duhur.
using OpenEmail; var builder = WebApplication.CreateBuilder(args); builder.Services.AddSingleton(new OpenEmailClient(new OpenEmailOptions{ ApiKey = builder.Configuration["OpenEmail:ApiKey"],})); var app = builder.Build(); app.MapPost("/invoices/{number}/send", async (string number, OpenEmailClient client, CancellationToken cancellationToken) =>{ var sent = await client.Emails.SendAsync(new Body { ["from"] = "[email protected]", ["to"] = "[email protected]", ["subject"] = $"Invoice {number}", ["text"] = "The invoice is attached.", }, idempotencyKey: $"invoice-{number}", cancellationToken: cancellationToken); return Results.Ok(new { id = (string?)sent["id"] });}); app.Run();Çfarë refuzon klienti
- Një çelës që nuk fillon me
oe_live_oseoe_test_, dhe një çelës së bashku me një token aksesi. - Dërgimin e një kredenciali përmes
http:të thjeshtë, përveç kur serveri është në këtë makinë, telocalhost, te një adresë127.x.x.xose te::1. - Një URL bazë te
0.0.0.0, që është një adresë ku dëgjon një server. Përdorni127.0.0.1me të njëjtën portë. - Një id bosh, ose një të përbërë vetëm nga pika, të cilën një analizues URL-je do ta hiqte.
- Ndjekjen e një ridrejtimi. Klienti HTTP që ndërton paketa nuk ndjek kurrë asnjë, kështu që një kredencial nuk udhëton kurrë te një host tjetër.
Shtypja e një klienti ose e një përjashtimi nuk shfaq kurrë një kredencial. ToString() te një klient jep modalitetin dhe URL-në e tij bazë, dhe asgjë tjetër.
Një endpoint pa metodë
client.Raw.RequestAsync() thërret çdo shteg me kredencialin, URL-në bazë, afatin kohor dhe rregullat e riprovimit të klientit. Shtegu duhet të fillojë me një / të vetme, dhe një shteg që del nga origjina e URL-së bazë refuzohet.
var label = await client.Raw.RequestAsync("/labels", "POST", body: new Body { ["name"] = "Invoices" }); Console.WriteLine(label?["id"]);