Vue d’ensemble du protocole .NET et des méthodes pratiques du kit de développement logiciel (SDK) Azure pour .NET
Les bibliothèques clientes du SDK Azure fournissent une interface aux services Azure en convertissant les appels de méthode en messages envoyés via le protocole de service respectif. Pour les services d’API REST, cela signifie envoyer des requêtes HTTP et convertir les réponses en types d’exécution. Dans cet article, vous allez découvrir les différents types de méthodes exposées par les bibliothèques clientes et explorer leurs modèles d’implémentation.
Comprendre les méthodes de protocole et les méthodes pratiques
Une bibliothèque cliente Azure SDK pour .NET peut exposer deux catégories différentes de méthodes pour effectuer des requêtes auprès d’un service Azure :
- Les méthodes de protocole fournissent un wrapper mince autour de l’API REST sous-jacente pour un service Azure correspondant. Ces méthodes mappent les paramètres d’entrée primitifs aux valeurs de requête HTTP et retournent un objet de réponse HTTP brut.
- Les méthodes pratiques fournissent une couche pratique sur la couche de protocole de niveau inférieur pour ajouter la prise en charge du système de type .NET et d’autres avantages. Les méthodes pratiques acceptent des primitives ou des types de modèle .NET comme paramètres et les mappent au corps d’une demande d’API REST sous-jacente. Ces méthodes gèrent également différents détails de la gestion des demandes et des réponses pour permettre aux développeurs de se concentrer sur l’envoi et la réception d’objets de données, au lieu de problèmes de niveau inférieur.
Modèles de dépendances de bibliothèque cliente du SDK Azure
Les méthodes de protocole et les méthodes pratiques implémentent des modèles légèrement différents en fonction de la chaîne de dépendance de package sous-jacente de la bibliothèque correspondante. Une bibliothèque cliente Azure SDK pour .NET dépend de l’une des deux bibliothèques fondamentales différentes :
- Azure.Core fournit des primitives, des abstractions et des programmes d’assistance partagés pour la création de bibliothèques clientes de SDK Azure modernes. Ces bibliothèques suivent les instructions de conception Azure SDK pour .NET et utilisent des noms de package et des espaces de noms précédés de Azure, comme
Azure.Storage.Blobs
. - System.ClientModel est une bibliothèque principale qui fournit des primitives partagées, des abstractions et des programmes d’assistance pour les bibliothèques clientes de service .NET. La bibliothèque
System.ClientModel
est un ensemble d’outils à usage général conçu pour aider à créer des bibliothèques pour diverses plateformes et services, tandis que la bibliothèqueAzure.Core
est spécifiquement conçue pour la création de bibliothèques clientes Azure.
Remarque
La bibliothèque Azure.Core
elle-même dépend également de System.ClientModel
pour différents blocs de construction clients. Dans le contexte de cet article, le différentiateur clé pour les modèles de méthode est de savoir si une bibliothèque cliente dépend de Azure.Core
ou de System.ClientModel
directement, plutôt que par le biais d’une dépendance transitive.
Le tableau suivant compare certains des types de requête et de réponse utilisés par le protocole et les méthodes pratiques, selon que la bibliothèque dépend de Azure.Core
ou de System.ClientModel
.
Problème de demande ou de réponse | Azure.Core | System.ClientModel |
---|---|---|
Corps de la demande | RequestContent | BinaryContent |
Options de demande avancées | RequestContext | RequestOptions |
Réponse HTTP brute | Response | PipelineResponse |
Type de retour avec le modèle de sortie | Response<T> | ClientResult<T> |
Les sections à venir fournissent des exemples d’implémentation de ces concepts.
Exemples de méthodes de protocole et de méthodes pratiques
Les modèles de codage et les types utilisés par le protocole de bibliothèque cliente et les méthodes pratiques varient légèrement selon que la bibliothèque dépend de Azure.Core
ou de System.ClientModel
. Les différences influencent principalement les types .NET utilisés pour la gestion des données de demande et de réponse.
Bibliothèques qui dépendent d’Azure.Core
Les bibliothèques clientes du SDK Azure qui respectent les dernières instructions de conception dépendent de la bibliothèque Azure.Core
. Par exemple, la bibliothèque Azure.AI.ContentSafety
dépend de la bibliothèque Azure.Core
et fournit une classe ContentSafetyClient
qui expose les méthodes de protocole et les méthodes pratiques.
Le code suivant utilise ContentSafetyClient
pour appeler la méthode pratique AnalyzeText
:
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}");
}
Le code précédent illustre les modèles de méthode pratique Azure.Core
suivants :
- Utilise un type primitif C# standard ou un type de modèle en tant que paramètre.
- Retourne un type C# convivial qui représente le résultat de l’opération.
Bibliothèques qui dépendent de System.ClientModel
Certaines bibliothèques clientes qui se connectent à des services non Azure utilisent des modèles similaires aux bibliothèques qui dépendent de Azure.Core
. Par exemple, la bibliothèque OpenAI
fournit un client qui se connecte aux services OpenAI. Ces bibliothèques sont basées sur une bibliothèque appelée System.ClientModel
qui présente des modèles similaires à Azure.Core
.
Tenez compte du code suivant qui utilise ChatClient
pour appeler la méthode pratique CompleteChat
:
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}");
Le code précédent illustre les modèles de méthode pratique System.ClientModel
suivants :
- Utilise un type primitif C# standard ou un type de modèle en tant que paramètre.
- Retourne un type
ClientResult
qui représente le résultat de l’opération.
Gérer les exceptions
Lorsqu'un appel de service échoue, le client du service lève une exception qui expose le code d'état HTTP et les détails de la réponse du service, s'ils sont disponibles. Une bibliothèque dépendante de System.ClientModel
provoque un ClientResultException, tandis qu'une bibliothèque dépendante de Azure.Core
provoque un 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}");
}
Conseils d’utilisation des méthodes de protocole et des méthodes pratiques
Bien que le SDK Azure pour les bibliothèques clientes .NET offre la possibilité d’utiliser des méthodes de protocole ou des méthodes pratiques, favorisez l’utilisation des méthodes pratiques dans la plupart des scénarios. Les méthodes pratiques sont conçues pour améliorer l’expérience de développement et offrir une flexibilité pour la création de demandes et la gestion des réponses. Toutefois, les deux types de méthode peuvent être utilisés dans votre application en fonction des besoins. Tenez compte des critères suivants pour décider du type de méthode à utiliser.
Les méthodes pratiques :
- Permettent d’utiliser des types de paramètres de méthode et de réponse plus conviviaux.
- S’occupent de diverses préoccupations et optimisations de bas niveau à votre place.
Les méthodes de protocole :
- Fournissent un accès aux types de niveau inférieur, tels que
RequestContext
etRequestOptions
, qui ne sont pas disponibles avec les méthodes pratiques. - Permettent un accès aux fonctionnalités des API REST sous-jacentes que les méthodes pratiques n’exposent pas.
- Vous pouvez créer vos propres méthodes pratiques autour des points de terminaison de service qui n’ont pas encore de méthodes pratiques. Cette approche nécessite de comprendre la documentation de l’API REST du service pour gérer correctement les demandes et les réponses.