Übersicht über Protokoll- und Hilfsmethoden von Azure SDK für .NET
Die Azure SDK-Clientbibliotheken stellen eine Schnittstelle zu Azure-Diensten bereit, indem Methodenaufrufe in Nachrichten übersetzt werden, die über das jeweilige Dienstprotokoll gesendet werden. Bei REST-API-Diensten bedeutet dies, dass HTTP-Anforderungen gesendet und die Antworten in Runtimetypen konvertiert werden. In diesem Artikel erfahren Sie mehr über die verschiedenen Arten von Methoden, die von den Clientbibliotheken verfügbar gemacht werden. Außerdem werden Implementierungsmuster genauer untersucht.
Grundlegendes zu Protokoll- und Hilfsmethoden
Ein Azure SDK für .NET-Clientbibliotheken kann zwei verschiedene Kategorien von Methoden verfügbar machen, um Anforderungen an einen Azure-Dienst zu stellen:
- Protokollmethoden bieten einen einfachen Wrapper für die zugrunde liegende REST-API für einen entsprechenden Azure-Dienst. Diese Methoden ordnen primitive Eingabeparameter HTTP-Anforderungswerten zu und geben ein unformatiertes HTTP-Antwortobjekt zurück.
- Hilfsmethoden bieten eine Hilfsebene über der Protokollebene auf niedrigerer Ebene, um Unterstützung für das .NET-Typsystem und andere Vorteile hinzuzufügen. Hilfsmethoden akzeptieren Primitive oder .NET-Modelltypen als Parameter und ordnen sie dem Text einer zugrunde liegenden REST-API-Anforderung zu. Diese Methoden verarbeiten auch verschiedene Details der Anforderungs- und Antwortverwaltung, damit sich Entwickler auf das Senden und Empfangen von Datenobjekten anstatt auf Probleme niedrigerer Ebene konzentrieren können.
Abhängigkeitsmuster der Azure SDK-Clientbibliothek
Protokoll- und Hilfsmethoden implementieren etwas unterschiedliche Muster basierend auf der zugrunde liegenden Paketabhängigkeitskette der jeweiligen Bibliothek. Ein Azure SDK für .NET-Clientbibliotheken hängt von einer von zwei verschiedenen grundlegenden Bibliotheken ab:
- Azure.Core bietet gemeinsam genutzte Primitive, Abstraktionen und Hilfsprogramme zum Erstellen moderner Azure SDK-Clientbibliotheken. Diese Bibliotheken folgen den Azure SDK-Entwurfsrichtlinien für .NET und verwenden Paketnamen und Namespaces, denen Azurevorangestellt ist, z. B.
Azure.Storage.Blobs
. - System.ClientModel ist eine Kernbibliothek, die gemeinsam genutzte Primitive, Abstraktionen und Hilfsprogramme für .NET-Dienstclientbibliotheken bereitstellt. Die
System.ClientModel
-Bibliothek ist ein universelles Toolset, das darauf ausgelegt ist, Bibliotheken für verschiedene Plattformen und Dienste zu erstellen, während dieAzure.Core
-Bibliothek speziell für die Erstellung von Azure-Clientbibliotheken konzipiert ist.
Hinweis
Die Azure.Core
-Bibliothek selbst hängt auch von System.ClientModel
für verschiedene Clientbausteine ab. Im Sinne dieses Artikels liegt das Hauptunterscheidungsmerkmal der Methodenmuster darin, ob eine Clientbibliothek direkt von Azure.Core
oder System.ClientModel
abhängt oder über eine transitive Abhängigkeit.
In der folgenden Tabelle werden einige Anforderungs- und Antworttypen miteinander verglichen, die von Protokoll- und Hilfsmethoden in Abhängigkeit davon, ob die Bibliothek von Azure.Core
oder von System.ClientModel
abhängt, verwendet werden.
Thema der Anforderung oder der Antwort | Azure.Core | System.ClientModel |
---|---|---|
Anforderungstext | RequestContent | BinaryContent |
Erweiterte Anforderungsoptionen | RequestContext | RequestOptions |
Unformatierte HTTP-Antwort | Response | PipelineResponse |
Rückgabetyp mit Ausgabemodell | Response<T> | ClientResult<T> |
Die folgenden Abschnitte enthalten Implementierungsbeispiele für diese Konzepte.
Beispiele für Protokoll- und Hilfsmethoden
Die Codierungsmuster und Typen, die von den Protokoll- und Hilfsmethoden einer Clientbibliothek verwendet werden, variieren geringfügig, je nachdem, ob die Bibliothek von Azure.Core
oder System.ClientModel
abhängt. Die Unterschiede beeinflussen in erster Linie die .NET-Typen, die für die Verarbeitung von Anforderungs- und Antwortdaten verwendet werden.
Bibliotheken, die von Azure.Core abhängen
Azure SDK-Clientbibliotheken, die den neuesten Entwurfsrichtlinien entsprechen, hängen von der Azure.Core
-Bibliothek ab. Beispielsweise hängt die Azure.AI.ContentSafety
-Bibliothek von der Azure.Core
-Bibliothek ab und stellt eine ContentSafetyClient
-Klasse bereit, die sowohl Protokoll- als auch Hilfsmethoden verfügbar macht.
Der folgende Code verwendet ContentSafetyClient
, um die AnalyzeText
-Hilfsmethode aufzurufen:
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}");
}
Im vorherigen Code werden die folgenden Muster der Azure.Core
-Hilfsmethode veranschaulicht:
- Verwendet einen standardmäßigen C#-Primitivtyp oder -Modelltyp als Parameter.
- Gibt einen benutzerfreundlichen C#-Typ zurück, der das Ergebnis des Vorgangs darstellt.
Bibliotheken, die von System.ClientModel abhängen
Einige Clientbibliotheken, die eine Verbindung mit Nicht-Azure-Diensten herstellen, verwenden ähnliche Muster wie die Bibliotheken, die von Azure.Core
abhängen. Beispielsweise stellt die OpenAI
-Bibliothek einen Client bereit, der mit den OpenAI-Diensten verbunden wird. Diese Bibliotheken basieren auf einer Bibliothek namens System.ClientModel
, die Muster ähnlich wie Azure.Core
aufweist.
Betrachten Sie den folgenden Code, der ChatClient
verwendet, um die CompleteChat
-Hilfsmethode aufzurufen:
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}");
Im vorherigen Code werden die folgenden Muster der System.ClientModel
-Hilfsmethode veranschaulicht:
- Verwendet einen standardmäßigen C#-Primitivtyp oder -Modelltyp als Parameter.
- Gibt einen
ClientResult
-Typ zurück, der das Ergebnis des Vorgangs darstellt.
Verarbeiten von Ausnahmen
Wenn ein Dienstaufruf fehlschlägt, löst der Dienstclient eine Ausnahme aus, die den HTTP-Statuscode und die Details der Dienstantwort zur Verfügung stellt (falls verfügbar). Eine von System.ClientModel
abhängige Bibliothek löst eine ClientResultException aus, während eine von Azure.Core
abhängige Bibliothek eine RequestFailedException auslöst.
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}");
}
Verwendungsempfehlungen für Protokoll- und Hilfsmethoden
Obwohl das Azure SDK für .NET-Clientbibliotheken die Möglichkeit bietet, Protokoll- oder Hilfsmethoden zu verwenden, priorisieren Sie in den meisten Szenarien die Verwendung von Hilfsmethoden. Hilfsmethoden sind darauf ausgelegt, die Entwicklungserfahrung zu verbessern. Außerdem bieten sie Flexibilität bei der Erstellung von Anforderungen und der Behandlung von Antworten. Beide Methodentypen können jedoch nach Bedarf in Ihrer App verwendet werden. Berücksichtigen Sie die folgenden Kriterien, wenn Sie entscheiden, welcher Methodentyp verwendet werden soll.
Hilfsmethoden:
- Ermöglichen Ihnen die Arbeit mit benutzerfreundlicheren Methodenparametern und Antworttypen.
- Erledigen verschiedene Probleme und Optimierungen auf niedriger Ebene für Sie.
Protokollmethoden:
- Bieten Zugriff auf Typen auf niedrigerer Ebene, z. B.
RequestContext
undRequestOptions
, die nicht über Hilfsmethoden verfügbar sind. - Ermöglichen den Zugriff auf Features der zugrunde liegenden REST-APIs, die von Hilfsmethoden nicht verfügbar gemacht werden.
- Ermöglichen es Ihnen, eigene Hilfsmethoden für Dienstendpunkte zu erstellen, die noch nicht über Hilfsmethoden verfügen. Bei diesem Ansatz ist es erforderlich, die REST-API-Dokumentation des Diensts zu verstehen, um Anforderungen und Antworten ordnungsgemäß zu verarbeiten.