Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure SDK-klientbiblioteken tillhandahåller ett gränssnitt till Azure-tjänster genom att översätta metodanrop till meddelanden som skickas via respektive tjänstprotokoll. För REST API-tjänster innebär det att skicka HTTP-begäranden och konvertera svaren till körningstyper. I den här artikeln får du lära dig mer om de olika typer av metoder som exponeras av klientbiblioteken och utforska deras implementeringsmönster.
Förstå protokoll- och bekvämlighetsmetoder
Ett Azure SDK för .NET-klientbibliotek kan exponera två olika typer av metoder för att göra begäranden till en Azure-tjänst:
- Protokollmetoder ger en tunn omslutning runt det underliggande REST-API:et för en motsvarande Azure-tjänst. Dessa metoder mappar primitiva indataparametrar till HTTP-begärandevärden och returnerar ett http-svarsobjekt.
- Bekvämlighetsmetoder ger ett bekvämlighetslager över protokollskiktet på lägre nivå för att lägga till stöd för .NET-typsystemet och andra fördelar. Bekvämlighetsmetoder accepterar primitiver eller .NET-modelltyper som parametrar och mappar dem till brödtexten i en underliggande REST API-begäran. Dessa metoder hanterar också olika detaljer om hantering av begäranden och svar så att utvecklare kan fokusera på att skicka och ta emot dataobjekt, i stället för problem på lägre nivå.
Beroendemönster för Azure SDK-klientbibliotek
Protokoll- och bekvämlighetsmetoder implementerar något olika mönster baserat på den underliggande paketberoendekedjan för respektive bibliotek. Ett Azure SDK för .NET-klientbibliotek beror på ett av två olika grundläggande bibliotek:
-
Azure.Core tillhandahåller delade primitiver, abstraktioner och hjälpfunktioner för att skapa moderna Azure SDK-klientbibliotek. Dessa bibliotek följer Azure SDK:s designriktlinjer för .NET och använder paketnamn och namnområden som är prefix för Azure, till exempel
Azure.Storage.Blobs. -
System.ClientModel är ett kärnbibliotek som tillhandahåller delade primitiver, abstraktioner och hjälpfunktioner för .NET-tjänstklientbibliotek. Biblioteket
System.ClientModelär en verktygsuppsättning för generell användning som är utformad för att hjälpa till att skapa bibliotek för olika plattformar och tjänster, medanAzure.Corebiblioteket är särskilt utformat för att skapa Azure-klientbibliotek.
Kommentar
Själva Azure.Core biblioteket är System.ClientModel också beroende av för olika klientbyggstenar. I den här artikeln är den viktigaste differentiatorn för metodmönster om ett klientbibliotek är beroende av Azure.Core eller System.ClientModel direkt, snarare än via ett transitivt beroende.
I följande tabell jämförs några av de typer av begäranden och svar som används av protokoll- och bekvämlighetsmetoder, baserat på om biblioteket är Azure.Core beroende av eller System.ClientModel.
| Problem med begäran eller svar | Azure.Core | System.ClientModel |
|---|---|---|
| Begärandetext | RequestContent | BinaryContent |
| Avancerade alternativ för begäranden | RequestContext | RequestOptions |
| Raw HTTP-svar | Response | PipelineResponse |
| Returtyp med utdatamodell | Response<T> | ClientResult<T> |
I de kommande avsnitten finns implementeringsexempel på dessa begrepp.
Exempel på protokoll- och bekvämlighetsmetoder
De kodningsmönster och typer som används av klientbibliotekets protokoll och bekvämlighetsmetoder varierar något beroende på om biblioteket är Azure.Core beroende av eller System.ClientModel. Skillnaderna påverkar främst de .NET-typer som används för hantering av begärande- och svarsdata.
Bibliotek som är beroende av Azure.Core
Azure SDK-klientbibliotek som följer de senaste designriktlinjerna beror på Azure.Core biblioteket. Biblioteket är till exempel Azure.AI.ContentSafety beroende av Azure.Core biblioteket och tillhandahåller en ContentSafetyClient klass som exponerar både protokoll- och bekvämlighetsmetoder.
Följande kod använder en ContentSafetyClient för att anropa AnalyzeText bekvämlighetsmetoden:
using Azure.AI.ContentSafety;
using Azure.Identity;
// Create the client
ContentSafetyClient client = new(
new Uri("https://contentsafetyai.cognitiveservices.azure.com/"),
new DefaultAzureCredential());
// Call the convenience method
AnalyzeTextResult result = client.AnalyzeText("What is Microsoft Azure?");
// Display the results
foreach (TextCategoriesAnalysis item in result.CategoriesAnalysis)
{
Console.WriteLine($"{item.Category}: {item.Severity}");
}
Föregående kod visar följande Azure.Core bekvämlighetsmetodmönster:
- Använder en vanlig C#-primitiv eller modelltyp som parameter.
- Returnerar en vänlig C#-typ som representerar resultatet av åtgärden.
Bibliotek som är beroende av System.ClientModel
Vissa klientbibliotek som ansluter till icke-Azure-tjänster använder mönster som liknar de bibliotek som är beroende Azure.Coreav . Biblioteket tillhandahåller till exempel OpenAI en klient som ansluter till OpenAI-tjänsterna. Dessa bibliotek baseras på ett bibliotek med namnet System.ClientModel som har mönster som liknar Azure.Core.
Överväg följande kod som använder en ChatClient för att anropa CompleteChat bekvämlighetsmetoden:
using OpenAI.Chat;
// Create the client
ChatClient client = new(
model: "gpt-4o-mini",
credential: Environment.GetEnvironmentVariable("OPENAI_API_KEY")!);
// Call the convenience method
ChatCompletion completion = client.CompleteChat("What is Microsoft Azure?");
// Display the results
Console.WriteLine($"[{completion.Role}]: {completion}");
Föregående kod visar följande System.ClientModel bekvämlighetsmetodmönster:
- Använder en vanlig C#-primitiv eller modelltyp som parameter.
- Returnerar en
ClientResulttyp som representerar resultatet av åtgärden.
Hantera undantag
När ett tjänstanrop misslyckas utlöser tjänstklienten ett undantag som exponerar HTTP-statuskoden och information om tjänstsvaret, om det är tillgängligt. Ett System.ClientModel-beroende bibliotek genererar ett ClientResultException, medan ett Azure.Core-beroende bibliotek genererar en RequestFailedException.
using Azure.AI.ContentSafety;
using Azure.Identity;
using Azure;
// Create the client
ContentSafetyClient client = new(
new Uri("https://contentsafetyai.cognitiveservices.azure.com/"),
new DefaultAzureCredential());
try
{
// Call the convenience method
AnalyzeTextResult result = client.AnalyzeText("What is Microsoft Azure?");
// Display the results
foreach (TextCategoriesAnalysis item in result.CategoriesAnalysis)
{
Console.WriteLine($"{item.Category}: {item.Severity}");
}
}
catch (RequestFailedException ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
Användningsvägledning för protokoll och bekvämlighetsmetod
Även om Azure SDK för .NET-klientbibliotek ger möjlighet att använda antingen protokoll- eller bekvämlighetsmetoder, prioriterar du användning av bekvämlighetsmetoder i de flesta scenarier. Bekvämlighetsmetoder är utformade för att förbättra utvecklingsupplevelsen och ge flexibilitet för redigering av begäranden och hantering av svar. Båda metodtyperna kan dock användas i din app efter behov. Tänk på följande kriterier när du bestämmer vilken typ av metod som ska användas.
Bekvämlighetsmetoder:
- Gör att du kan arbeta med mer användarvänliga metodparametrar och svarstyper.
- Hantera olika problem och optimeringar på låg nivå åt dig.
Protokollmetoder:
- Ge åtkomst till typer på lägre nivå, till exempel
RequestContextochRequestOptions, som inte är tillgängliga via bekvämlighetsmetoder. - Aktivera åtkomst till funktioner i underliggande REST-API:er som bekvämlighetsmetoder inte exponerar.
- Gör att du kan skapa egna bekvämlighetsmetoder runt tjänstslutpunkter som inte redan har bekvämlighetsmetoder. Den här metoden kräver att du förstår tjänstens REST API-dokumentation för att hantera begäranden och svar korrekt.