Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Vous interagissez avec l’API Web en composant et en envoyant des demandes HTTP. Vous devez savoir comment définir les en-têtes HTTP appropriés et gérer toutes les erreurs incluses dans la réponse.
URL et versions d’API Web
Rechercher l’URL de l’API web pour votre environnement
Connectez-vous à Power Apps, puis sélectionnez votre environnement dans le coin supérieur droit.
Cliquez sur le bouton Paramètres dans le coin supérieur droit, puis sélectionnez Ressources du développeur.
À partir de là, vous pouvez copier la valeur du point de terminaison de l'API Web. Pour plus d’informations, consultez Afficher les ressources du développeur.
Le tableau suivant décrit les éléments de l’URL :
| Partie | Description |
|---|---|
| Protocole | https:// |
| Nom de l’environnement | Nom unique qui s’applique à votre environnement. Si le nom de votre entreprise est Contoso, il se peut que ce soit contoso. |
| Région | Votre environnement est généralement dans un centre de données proche de votre emplacement géographique. Pour l’Amérique du Nord, il s’agit de crm. Pour l’Amérique crm2du Sud . Pour le Japon crm7. Pour obtenir la liste complète, consultez les régions du centre de données. |
| URL de base | Cette valeur est généralement dynamics.com., mais certains centres de données utilisent des valeurs différentes. Consultez la section Régions des centres de données. |
| Chemin d’accès de l’API Web | Le chemin d’accès à l’API Web est /api/data/. |
| Version | La version est exprimée comme suit : v[Major_version].[Minor_version][PatchVersion]/. La version actuelle est v9.2. |
| Ressource | Le EntitySetName de la table, ou le nom de la fonction ou de l’action que vous souhaitez utiliser. |
L’URL que vous utilisez est composée des parties suivantes :
Protocole + Nom + Région + URL + de baseChemin d’accès de + l’API webVersion + Ressource.
Longueur maximale de l’URL
La longueur maximale de l’URL acceptée est de 32 Ko (32 768 caractères). Cette longueur convient à la plupart des types de requêtes, à l’exception de certaines GET opérations qui nécessitent des paramètres de requête de chaîne très longs, tels que des requêtes utilisant FetchXml. Si vous envoyez des requêtes dans le corps d’une $batch requête, vous pouvez envoyer des requêtes avec des URL allant jusqu’à 64 Ko (65 536 caractères).
En savoir plus sur l’envoi de FetchXml dans une requête $batch.
Longueur maximale du segment OData
La longueur maximale d’un segment individuel dans une requête OData est de 260 caractères. Si un segment unique de la requête OData est de plus de 260 caractères, la requête retourne 400 Bad Request - Invalid URL. Le segment est la partie « Ressource » de l’URL et inclut tous les caractères nécessaires pour décrire le point de terminaison et tous les paramètres inline.
Par exemple, si la requête est api/data/v9.2/MyApi(MyParameter='longvalue'), MyApi(MyParameter='longvalue') est le segment qui ne peut pas dépasser 260 caractères. Utilisez toujours des alias de paramètre avec des fonctions OData. Par exemple, la composition de votre fonction comme /api/data/v9.2/MyApi(MyParameter=@alias)?@alias='longvalue' raccourcit le segment à seulement MyApi(MyParameter=@alias).
En savoir plus sur l’utilisation d’alias de paramètres avec des fonctions d’API web.
Compatibilité de version
Cette version introduit des fonctionnalités que les versions précédentes ne prennent pas en charge. Les versions mineures suivantes peuvent fournir davantage de fonctionnalités que les versions mineures antérieures ne prennent pas en charge. Votre code écrit pour v9.0 continue de fonctionner dans les futures versions lorsque vous référencez v9.0 dans votre URL.
À mesure que de nouvelles fonctionnalités sont introduites, elles peuvent entrer en conflit avec les versions antérieures. Ces changements disruptifs sont nécessaires pour améliorer le service. La plupart du temps, les fonctionnalités restent les mêmes entre les versions, mais n'en soyez pas sûr que c'est toujours le cas.
Note
Contrairement aux versions mineures v8.x, les futures versions n’appliquent pas de nouvelles fonctionnalités ou d’autres modifications aux versions antérieures. Faites attention à la version du service que vous utilisez et tester votre code si vous modifiez la version utilisée.
Méthodes HTTP
La table suivante répertorie les méthodes HTTP que vous pouvez utiliser avec l’API web Dataverse.
| méthode | Utilisation |
|---|---|
GET |
À utiliser lors de la récupération des données, notamment les fonctions d’appel. Le code d’état attendu pour une récupération réussie est 200 OK. |
POST |
À utiliser lors de la création d’entités ou d’actions d’appel. |
PATCH |
À utiliser lors de la mise à jour d’entités ou l’exécution d’opérations de type upsert. |
DELETE |
À utiliser lors de la suppression des entités ou des propriétés individuelles des entités. |
PUT |
À utiliser dans des situations limitées pour mettre à jour différentes propriétés d’entités. Cette méthode n’est pas recommandée en mettant à jour la plupart des entités. Utilisez PUT lors de la mise à jour des définitions de table. Pour plus d’informations : Utiliser l’API web avec les définitions de table |
En-têtes HTTP
Toutes les requêtes HTTP doivent inclure au moins les en-têtes suivants.
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Bien que le protocole OData autorise les deux formats, JSON et ATOM, l’API Web prend en charge uniquement le format JSON. Chaque demande doit inclure la valeur d’en-tête Accept de application/json, même lorsqu’aucun corps de réponse n’est prévu. L’API web retourne toute erreur dans la réponse en tant que JSON. Bien que votre code fonctionne même si cet en-tête n’est pas inclus, incluez-le comme meilleure pratique.
La version actuelle d’OData est 4.0, mais les futures versions peuvent introduire de nouvelles fonctionnalités. Pour vous assurer qu’il n’existe aucune ambiguïté concernant la version OData qui s’applique à votre code, incluez toujours une instruction explicite de la version OData actuelle et de la version maximale. Utilisez les en-têtes OData-Version et OData-MaxVersion définis sur la valeur 4.0.
Les requêtes qui étendent les propriétés de navigation à valeur de collection peuvent retourner des données mises en cache pour ces propriétés qui ne reflètent pas les modifications récentes. Incluez l’en-tête If-None-Match: null dans le corps de la demande pour remplacer la mise en cache du navigateur de la demande de l’API Web. Pour plus d’informations, consultez Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests 3.2 : If-None-Match.
Chaque demande contenant des données JSON dans le corps de la demande doit inclure un en-tête Content-Type contenant une valeur application/json.
Content-Type: application/json
Vous pouvez utiliser des en-têtes supplémentaires pour activer des fonctionnalités spécifiques.
En-têtes Prefer
Utilisez l’en-tête Prefer avec les valeurs suivantes pour spécifier les préférences.
| Préférez la valeur | Description |
|---|---|
return=representation |
Pour retourner des données lors des opérations de création (POST) ou de mise à jour (PATCH) pour les entités, incluez cette préférence . Lorsque vous appliquez cette préférence à une POST demande, une réponse réussie a l’état 201 Created . Pour une PATCH demande, une réponse réussie a un état 200 OK. Sans cette préférence, les deux opérations retournent l’état 204 No Content pour refléter que le corps de la réponse ne contient aucune donnée. Pour plus d’informations, voir Créer avec les données renvoyées et Mettre à jour avec les données renvoyées |
odata.include-annotations |
Voir Demander des annotations |
odata.maxpagesize |
Utilisez cette préférence pour spécifier le nombre de pages que vous souhaitez renvoyer dans une requête. Pour plus d’informations, voir : Résultats de la page |
odata.track-changes |
La fonctionnalité de suivi des modifications conserve les données synchronisées de manière efficace en détectant les données modifiées depuis l’extraction initiale ou la dernière synchronisation des données. Plus d’informations : Utiliser le suivi des modifications pour synchroniser les données avec les systèmes externes |
respond-async |
Spécifie que la demande doit être traitée de manière asynchrone. Plus d’informations : Opérations en arrière-plan (version préliminaire) |
Note
Vous pouvez spécifier plusieurs Prefer en-têtes à l’aide de valeurs séparées par des virgules. Par exemple : Prefer: respond-async,odata.include-annotations="*"
Demander des annotations
Vous pouvez demander différentes données d'annotation OData à être renvoyées avec les résultats à l'aide de l'en-tête de requête Prefer: odata.include-annotations. Vous pouvez choisir de retourner toutes les annotations ou de spécifier des annotations spécifiques. Le tableau suivant décrit les annotations prises en charge par l’API web Dataverse :
| Annotation | Description |
|---|---|
OData.Community.Display.V1.FormattedValue |
Renvoie des valeurs de chaînes mises en forme que vous pouvez utiliser dans votre application. Pour plus d’informations : Valeurs mises en forme |
Microsoft.Dynamics.CRM.associatednavigationpropertyMicrosoft.Dynamics.CRM.lookuplogicalname |
Renvoie des informations sur les colonnes de recherche associées. Plus d’informations : Données de propriétés de recherche et recherches multi-tables |
Microsoft.Dynamics.CRM.totalrecordcountMicrosoft.Dynamics.CRM.totalrecordcountlimitexceeded |
Lorsque vous utilisez l’option $count de requête, l’annotation @odata.count indique le nombre d’enregistrements, mais seuls 5 000 enregistrements de table standard peuvent être retournés à la fois. Pour les tables élastiques, la limite de taille de page est de 500. Demandez à l’annotation Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded d’obtenir une valeur booléenne qui indique si le nombre total d’enregistrements correspondant à la requête dépasse la limite de taille de page maximale pour le type de table que vous utilisez. Plus d’informations : Compter le nombre de lignes |
Microsoft.Dynamics.CRM.globalmetadataversion |
Vous pouvez mettre en cache cette annotation dans votre application. La valeur change quand une modification de schéma se produit, ce qui indique que vous devrez peut-être actualiser les données de schéma mises en cache par votre application. Plus d’informations : Mettre en cache les données du schéma |
Microsoft.PowerApps.CDS.ErrorDetails.OperationStatusMicrosoft.PowerApps.CDS.ErrorDetails.SubErrorCodeMicrosoft.PowerApps.CDS.HelpLinkMicrosoft.PowerApps.CDS.TraceTextMicrosoft.PowerApps.CDS.InnerError.Message |
Ces annotations fournissent plus de détails lorsque des erreurs sont renvoyées. Plus d'informations : Fournir plus de détails sur les erreurs |
Pour demander des annotations spécifiques, incluez-les sous forme de valeurs séparées par des virgules. Vous pouvez également utiliser le caractère ’*’ comme caractère générique. Par exemple, l’en-tête de requête suivant Prefer inclut uniquement les valeurs mises en forme et toutes les annotations de détails d’erreur supplémentaires :
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue,Microsoft.PowerApps.CDS.ErrorDetails*"
Astuce
Pour renvoyer toutes les annotations, utilisez l’en-tête de requête Prefer: odata.include-annotations="*".
Autres en-têtes
| En-tête | valeur | Description |
|---|---|---|
CallerObjectId |
ID d’objet utilisateur Microsoft Entra ID | Utilisez cet en-tête pour usurper l’identité d’un autre utilisateur lorsque l’appelant a les privilèges pour le faire. Définissez la valeur à l'ID d'objet Microsoft Entra du compte utilisateur à remplacer. Ces données sont présentes dans l’attribut AzureActiveDirectoryObjectId (colonne) de la Table/entité de l’utilisateur (SystemUser). Pour plus d’informations : Emprunter l’identité d’un autre utilisateur à l’aide de l’API Web. |
If-Match |
Valeur Etagou * |
Utilisez cet en-tête pour appliquer la concurrence optimiste afin de vous assurer que vous n’écrasez pas les modifications que quelqu’un d’autre a appliquées sur le serveur depuis que vous avez récupéré un enregistrement. Plus d’informations : Appliquer le contrôle de concurrence optimiste et If-Match. Vous pouvez également utiliser cet en-tête avec * afin d’empêcher qu’une opération PATCH ne crée un enregistrement. Plus d’informations : Empêcher la création dans upsert. |
If-None-Match |
nullou * |
Cet en-tête doit être utilisé dans toutes les requêtes avec une valeur denull comme décrit dans En-têtes HTTP, mais il peut également être utilisé pour prévenir unePOST opération d’effectuer une mise à jour. Plus d’informations : Empêcher la mise à jour dans upsert et If-None-Match. |
MSCRM.SolutionUniqueName |
Nom unique de la solution | Utilisez cet en-tête lorsque vous souhaitez créer un composant de solution et l’associer à une solution non gérée. Pour plus d’informations, voir Créer et mettre à jour les définitions de table à l’aide de l’API web. |
MSCRM.SuppressDuplicateDetection |
false |
Utilisez cet en-tête avec la valeur false pour activer détection des doublons lors de la création ou de la mise à jour d’un enregistrement. Pour plus d’informations, recherchez les enregistrements dupliqués. |
MSCRM.BypassCustomPluginExecution |
true |
Utilisez cet en-tête lorsque vous souhaitez contourner le code de plug-in personnalisé et que l’appelant a le prvBypassCustomPlugins privilège. Plus d’informations : Contourner la logique métier personnalisée. |
Consistency |
Strong |
Utilisez cet en-tête lorsque vous devez disposer de la version la plus récente d’un élément mis en cache. Les éléments mis en cache incluent : les définitions de métadonnées, les étiquettes, les autorisations utilisateur et les autorisations d’équipe. Par exemple, si vous appliquez une modification à une définition, une étiquette ou une autorisation de métadonnées et que votre code doit utiliser la dernière définition dans les 30 secondes suivant la modification, vous pouvez utiliser cet en-tête pour vous assurer d’obtenir la dernière version. L’utilisation de cet en-tête entraîne une légère pénalité de performance, il est donc préférable de ne pas l’utiliser systématiquement. |
Lorsque vous exécutez des opérations par lots, vous devez appliquer plusieurs en-têtes différents dans la demande et pour chaque partie envoyée dans le corps de la requête. Pour plus d’informations : Exécuter des opérations par lots à l’aide de l’API Web.
Identifier les codes de statut
Si une demande HTTP aboutit ou échoue, la réponse contiendra un code de statut. La table suivante décrit les codes de statut renvoyés par l’API Web Microsoft Dataverse.
| Code | Description | Type |
|---|---|---|
200 OK |
Attendez-vous à ce code de statut lorsque votre opération renvoie des données dans le corps de la réponse. | Opération réussie |
201 Created |
Attendez-vous à recevoir ce code de statut lorsque votre opération POST réussit et que vous avez spécifié la préférence return=representation dans votre requête. |
Opération réussie |
204 No Content |
Attendez-vous à ce code de statut lorsque votre opération aboutit mais ne renvoie pas de données dans le corps de la réponse. | Opération réussie |
304 Not Modified |
Code de statut généré lors du test pour voir si une entité a été modifiée depuis sa dernière récupération. Pour plus d’informations : Récupérations conditionnelles | Redirection |
403 Forbidden |
Attendez-vous à obtenir ce code de statut pour les types d'erreurs suivants : - AccessDenied- AttributePermissionReadIsMissing- AttributePermissionUpdateIsMissingDuringUpdate- AttributePrivilegeCreateIsMissing- CannotActOnBehalfOfAnotherUser- CannotAddOrActonBehalfAnotherUserPrivilege- CrmSecurityError- InvalidAccessRights- PrincipalPrivilegeDenied- PrivilegeCreateIsDisabledForOrganization- PrivilegeDenied- unManagedinvalidprincipal- unManagedinvalidprivilegeedepth |
Erreur client |
401 Unauthorized |
Attendez-vous à ce que ce code de statut soit généré pour les types d’erreurs suivants : - BadAuthTicket- ExpiredAuthTicket- InsufficientAuthTicket- InvalidAuthTicket- InvalidUserAuth- MissingCrmAuthenticationToken- MissingCrmAuthenticationTokenOrganizationName- RequestIsNotAuthenticated- TamperedAuthTicket- UnauthorizedAccess- UnManagedInvalidSecurityPrincipal |
Erreur client |
413 Payload Too Large |
Attendez-vous à recevoir ce code de statut lorsque la longueur de la requête est trop longue. En savoir plus sur les limitations de taille de la charge utile de la demande et de la réponse | Erreur client |
400 BadRequest |
Code de statut généré lorsqu’un argument n’est pas valide. | Erreur client |
404 Not Found |
Attendez ce code de statut lorsque la ressource n'existe pas. | Erreur client |
405 Method Not Allowed |
Cette erreur se produit pour les combinaisons de méthodes et de ressources incorrectes. Par exemple, vous ne pouvez pas utiliser DELETE ou PATCH sur une collection d’entités. Attendez-vous à cela pour les types d’erreurs suivants : - CannotDeleteDueToAssociation- InvalidOperation- NotSupported |
Erreur client |
412 Precondition Failed |
Attendez-vous à ce code de statut pour les types d’erreurs suivantes : - ConcurrencyVersionMismatch- DuplicateRecord |
Erreur client |
429 Too Many Requests |
Code de statut généré lorsque les limites de l’API sont dépassées. Plus d’information : Limites de l’API de protection des services | Erreur client |
501 Not Implemented |
Code de statut généré lorsqu’une opération demandée n’est pas implémentée. | Erreur du serveur |
503 Service Unavailable |
Code de statut généré lorsque le service API web n’est pas disponible. | Erreur du serveur |
Analyse des erreurs relatives à la réponse
La réponse inclut des détails sur les erreurs au format JSON dans le format suivant.
{
"error":{
"code": "<This code is not related to the http status code and is frequently empty>",
"message": "<A message describing the error>"
}
}
Inclure des détails supplémentaires avec les erreurs
Certaines erreurs incluent plus de détails par le biais d’annotations. Lorsqu’une demande inclut l’en-tête Prefer: odata.include-annotations="*" , la réponse inclut toutes les annotations qui contiennent plus de détails sur les erreurs et une URL qui peut vous diriger vers des conseils spécifiques pour l’erreur.
Les développeurs écrivant des plug-ins peuvent définir certains de ces détails. Par exemple, supposons que vous disposez d’un plug-in qui génère une erreur à l’aide du constructeur InvalidPluginExecutionException(OperationStatus, Int32, String). Ce constructeur accepte une OperationStatus valeur, un code d’erreur entier personnalisé et un message d’erreur.
Un plug-in simple peut ressembler à ceci :
namespace MyNamespace
{
public class MyClass : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
// Obtain the tracing service
ITracingService tracingService =
(ITracingService)serviceProvider.GetService(typeof(ITracingService));
tracingService.Trace("Entering MyClass plug-in.");
try
{
throw new InvalidPluginExecutionException(OperationStatus.Canceled, 12345, "Example Error Message.");
}
catch (InvalidPluginExecutionException ex)
{
tracingService.Trace("StackTrace:");
tracingService.Trace(ex.StackTrace);
throw ex;
}
}
}
}
Lorsque vous enregistrez ce module sur le message de création d'une entité de compte et que la requête de création d’un compte inclut la odata.include-annotations="*" préférence, la requête et la réponse ressemblent à l’exemple suivant :
Demande :
POST https://yourorg.api.crm.dynamics.com/api/data/v9.2/accounts HTTP/1.1
Content-Type: application/json;
Prefer: odata.include-annotations="*"
{
"name":"Example Account"
}
Réponse :
HTTP/1.1 400 Bad Request
Content-Type: application/json; odata.metadata=minimal
{
"error": {
"code": "0x80040265",
"message": "Example Error Message.",
"@Microsoft.PowerApps.CDS.ErrorDetails.OperationStatus": "1",
"@Microsoft.PowerApps.CDS.ErrorDetails.SubErrorCode": "12345",
"@Microsoft.PowerApps.CDS.HelpLink": "http://go.microsoft.com/fwlink/?LinkID=398563&error=Microsoft.Crm.CrmException%3a80040265&client=platform",
"@Microsoft.PowerApps.CDS.TraceText": "\r\n[MyNamespace: MyNamespace.MyClass ]\r\n[52e2dbb9-85d3-ea11-a812-000d3a122b89: MyNamespace.MyClass : Create of account] \r\n\r\n Entering MyClass plug-in.\r\nStackTrace:\r\n at MyNamespace.MyClass.Execute(IServiceProvider serviceProvider)\r\n\r\n"
"@Microsoft.PowerApps.CDS.InnerError.Message": "Example Error Message."
}
}
La table suivante décrit l’annotation de la réponse.
| Annotation et description | valeur |
|---|---|
@Microsoft.PowerApps.CDS.ErrorDetails.OperationStatusLa valeur du OperationStatus définie par le constructeur InvalidPluginExecutionException(OperationStatus, Int32, Chaîne). |
1 |
@Microsoft.PowerApps.CDS.ErrorDetails.SubErrorCodeLa valeur du SubErrorCode définie par le constructeur InvalidPluginExecutionException (OperationStatus, Int32, chaîne de caractères). |
12345 |
@Microsoft.PowerApps.CDS.HelpLinkURL qui contient des informations sur l’erreur et peut vous rediriger vers des conseils sur la façon de résoudre l’erreur. |
http://go.microsoft.com/fwlink/?LinkID=398563&error=Microsoft.Crm.CrmException%3a80040265&client=platform |
@Microsoft.PowerApps.CDS.TraceTextContenu écrit dans le journal de trace du plug-in à l’aide de la méthode ITracingService.Trace(String, Object[]). Cette annotation inclut la trace de pile du plug-in, puisqu'elle a été consignée par l'auteur du plug-in. |
[MyNamespace: MyNamespace.MyClass ][52e2dbb9-85d3-ea11-a812-000d3a122b89: MyNamespace.MyClass :Create of account]Entering MyClass plug-in.StackTrace: at MyNamespace.MyClass.Execute(IServiceProvider serviceProvider) |
@Microsoft.PowerApps.CDS.InnerError.MessageLe message d’erreur trouvé dans InnerError concernant l’exception. Ce message doit être le même que le message d’erreur, sauf dans certains cas particuliers qui sont réservés à un usage interne. |
Example Error Message. |
Note
Le @Microsoft.PowerApps.CDS.HelpLink ne garantit pas de fournir des conseils pour chaque erreur. Des conseils peuvent être fournis de manière proactive, mais le plus souvent, ils sont fournis de manière réactive en fonction de la fréquence à laquelle le lien est utilisé. Utilisez le lien. S'il ne fournit pas de conseils, l'utilisation du lien permet à l'équipe produit de suivre que les utilisateurs ont besoin de conseils supplémentaires sur l'erreur. L’équipe peut ensuite hiérarchiser notamment les conseils relatifs aux erreurs dont les utilisateurs ont besoin le plus. Les ressources vers lesquelles le lien pourrait vous diriger peuvent être de la documentation, des liens vers des ressources communautaires ou des sites externes.
Si vous ne souhaitez pas recevoir toutes les annotations dans la réponse, vous pouvez spécifier les annotations que vous souhaitez retourner. Au lieu d’utiliser Prefer: odata.include-annotations="*", utilisez la valeur suivante pour recevoir uniquement des valeurs mises en forme pour les opérations qui récupèrent des données et le lien d’aide si une erreur se produit : Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue,Microsoft.PowerApps.CDS.HelpLink".
Pour pus d’informations, voir : Demander des annotations
Ajouter une variable partagée à partir de l’API web
Vous pouvez définir une valeur de chaîne qui sera disponible pour les plug-ins dans la collection ExecutionContextSharedVariables. Pour en savoir plus, consultez :
Voir aussi
Effectuer des opérations à l’aide de l’API Web
Interroger les données à l’aide de l’API web
Créer une ligne de table à l’aide de l’API web
Récupérer une ligne de table à l’aide de l’API web
Mettre à jour et supprimer des lignes de table à l’aide de l’API web
Associer et dissocier des lignes de tables à l’aide de l’API web
Utiliser des fonctions API Web
Utiliser des actions de l'API Web
Exécuter des opérations par lots à l’aide de l’API Web
Emprunter l’identité d’un autre utilisateur à l’aide de l’API Web
Effectuez des opérations conditionnelles à l’aide de l’API web.