Services Web Apex
Objectifs de formation
Après avoir terminé ce module, vous pourrez :
- Décrire les deux types de services Web Apex et exposer une présentation à haut niveau de ces services.
- Créer une classe REST Apex contenant des méthodes pour chaque méthode HTTP.
- Invoquer une méthode REST Apex personnalisée avec un point de terminaison.
- Transmettre des données à une méthode REST Apex personnalisée en envoyant un corps de requête au format JSON.
- Développer une méthode test pour une méthode REST Apex et définir les propriétés d’une requête REST de test.
- Développer une méthode test pour une méthode REST Apex puis l’appeler avec des valeurs de paramètres.
Vidéo de démonstration Trail Together
Vous souhaitez être guidé pas à pas par un expert pendant que vous travaillez sur cette étape ? Regardez cette vidéo qui fait partie de la série Trail Together sur Trailhead Live.
(Ce clip commence à 1 h 07 min 03 s, au cas où vous voudriez revenir en arrière et regarder à nouveau le début de l’étape.)
Exposer votre classe Apex en tant que service Web
Vous pouvez exposer vos méthodes de classe Apex en tant qu’opération de service Web REST ou SOAP. Si vous faites en sorte que vos méthodes puissent être appelées via le Web, vos applications externes peuvent intégrer Salesforce pour effectuer toutes sortes d’opérations géniales.
Par exemple, disons que le centre d’appel de votre entreprise utilise une application interne pour gérer les ressources sur site. Les représentants de l’assistance clientèle sont supposés utiliser la même application pour effectuer leur travail quotidien, y compris pour gérer les enregistrements de requêtes dans Salesforce. En employant une seule interface, les représentants peuvent consulter et mettre à jour les enregistrements de requêtes et accéder aux ressources internes. L’application appelle une classe de service Web Apex pour gérer les enregistrements de requêtes Salesforce.
Exposer une classe en tant que service REST
La procédure permettant de rendre votre classe Apex accessible en tant que service Web REST est directe. Définissez votre classe en tant que classe globale, et définissez vos méthodes en tant que méthodes statiques globales. Ajoutez des annotations à la classe et aux méthodes. Dans notre exemple, la classe REST Apex utilise une seule méthode. La méthode getRecord
est un appel d’API REST personnalisé. Elle est annotée par @HttpGet
et invoquée pour une requête GET.
@RestResource(urlMapping='/Account/*') global with sharing class MyRestResource { @HttpGet global static Account getRecord() { // Add your code } }
Comme vous pouvez le voir, la classe est annotée avec @RestResource(urlMapping='/Account/*)
. Le point de terminaison de base pour REST Apex est https://VotreInstance.my.salesforce.com/services/apexrest/. Le mappage d’URL est ajouté au point de terminaison de base pour constituer le point de terminaison pour votre service REST. Ainsi, dans l’exemple de classe, le point de terminaison REST est https://VotreInstance.my.salesforce.com/services/apexrest/. Pour votre organisation, cela pourrait ressembler à quelque chose comme https://VotreInstance.my.salesforce.com/services/apexrest/Compte/*.
Le mappage d’URL est sensible à la casse et peut contenir un caractère générique (*).
Définissez chaque méthode exposée en tant que méthode statique globale
et ajoutez une annotation pour l’associer à une méthode HTTP. Les annotations suivantes sont disponibles. Vous ne pouvez utiliser chacune des annotations qu’une fois par classe Apex.
Annotation |
Action |
Détails |
---|---|---|
@HttpGet |
Lire |
Lit ou récupère les enregistrements. |
@HttpPost |
Créer |
Crée des enregistrements. |
@HttpDelete |
Supprimer |
Supprime des enregistrements. |
@HttpPut |
Upsert |
Généralement utilisée pour mettre à jour des enregistrements existants ou en créer de nouveaux. |
@HttpPatch |
Mettre à jour |
Généralement utilisée pour mettre à jour des champs des enregistrements existants. |
Exposer une classe en tant que service SOAP
La procédure permettant de rendre votre classe Apex accessible en tant que service Web SOAP est aussi simple que pour le REST. Définissez votre classe en tant que classe globale
. Ajoutez le mot clé webservice
et le modificateur de définition static
à chacune des méthodes que vous souhaitez exposer. Le mot clé webservice
offre un accès global à la méthode à laquelle il est ajouté.
Voici un exemple de classe avec une seule méthode. La méthode getRecord
est un appel d’API SOAP personnalisé retournant un enregistrement Compte.
global with sharing class MySOAPWebService { webservice static Account getRecord(String id) { // Add your code } }
L’application externe peut appeler vos méthodes Apex personnalisées en tant qu’opérations de service Web en exploitant le fichier WSDL de la classe. Générez ce fichier WSDL pour votre classe à partir de la page de détails de la classe. Vous pouvez y accéder depuis la page Classes Apex de Configuration. Vous envoyez généralement le fichier WSDL à des développeurs tiers (ou vous l’utilisez vous-même) afin de développer des intégrations pour votre service Web.
La sécurité de la plate-forme étant au cœur des préoccupations de Salesforce, une authentification est nécessaire pour votre service Web. En plus du fichier WSDL de la classe Apex, les applications externes doivent utiliser le fichier WSDL de l’entreprise ou du partenaire pour la fonctionnalité de connexion.
Procédure REST Apex
Et maintenant, amusons-nous. Les quelques prochaines étapes vous guideront tout au long du processus de création d’un service REST Apex. Pour commencer, vous allez créer la classe Apex exposée en tant que service REST. Ensuite, vous essaierez d’appeler quelques méthodes à partir d’un client, et enfin, vous développerez les tests de l’unité. Ça fait pas mal de code, mais vos efforts seront récompensés !
Votre classe Apex gère les enregistrements de requête. Cette classe contient cinq méthodes, et chacune d’elles correspond à une méthode HTTP. Par exemple, lorsque l’application client invoque un appel REST pour la méthode HTTP GET, la méthode getCaseById
est invoquée.
La classe étant définie avec un mappage d’URL de /Cases/*
, le point de terminaison utilisé pour appeler ce service REST est un URI commençant par https://VotreInstance.my.salesforce.com/services/apexrest/Cases/.
Nous vous suggérons également d’envisager un contrôle de version de vos points de terminaison d’API afin que vous puissiez améliorer une fonctionnalité sans endommager le code existant. Vous pourriez créer deux classes spécifiant les mappages d’URL de /Cases/v1/*
et /Cases/v2/*
pour implémenter cette fonctionnalité.
Commençons par créer une classe REST Apex.
- Ouvrez la Developer Console depuis Setup (Configuration) ().
- Dans Developer Console, sélectionnez File (Fichier) | New (Nouveau) | Apex Class (Classe Apex).
- Pour Class Name (Nom de classe), saisissez
CaseManager
, puis cliquez sur OK.
- Remplacez le code généré automatiquement par la définition de classe suivante :
@RestResource(urlMapping='/Cases/*') global with sharing class CaseManager { @HttpGet global static Case getCaseById() { RestRequest request = RestContext.request; // grab the caseId from the end of the URL String caseId = request.requestURI.substring( request.requestURI.lastIndexOf('/')+1); Case result = [SELECT CaseNumber,Subject,Status,Origin,Priority FROM Case WHERE Id = :caseId]; return result; } @HttpPost global static ID createCase(String subject, String status, String origin, String priority) { Case thisCase = new Case( Subject=subject, Status=status, Origin=origin, Priority=priority); insert thisCase; return thisCase.Id; } @HttpDelete global static void deleteCase() { RestRequest request = RestContext.request; String caseId = request.requestURI.substring( request.requestURI.lastIndexOf('/')+1); Case thisCase = [SELECT Id FROM Case WHERE Id = :caseId]; delete thisCase; } @HttpPut global static ID upsertCase(String subject, String status, String origin, String priority, String id) { Case thisCase = new Case( Id=id, Subject=subject, Status=status, Origin=origin, Priority=priority); // Match case by Id, if present. // Otherwise, create new case. upsert thisCase; // Return the case ID. return thisCase.Id; } @HttpPatch global static ID updateCaseFields() { RestRequest request = RestContext.request; String caseId = request.requestURI.substring( request.requestURI.lastIndexOf('/')+1); Case thisCase = [SELECT Id FROM Case WHERE Id = :caseId]; // Deserialize the JSON string into name-value pairs Map<String, Object> params = (Map<String, Object>)JSON.deserializeUntyped(request.requestbody.tostring()); // Iterate through each parameter field and value for(String fieldName : params.keySet()) { // Set the field and value on the Case sObject thisCase.put(fieldName, params.get(fieldName)); } update thisCase; return thisCase.Id; } }
- Appuyez sur CTRL+S pour enregistrer.
Créer un enregistrement avec une méthode POST
Utilisons la classe REST Apex que vous venez de créer, et amusons-nous un peu. Pour commencer, nous allons appeler la méthode POST pour créer un enregistrement de requête.
Pour invoquer votre service REST, vous devez utiliser… un client REST ! Vous pouvez employer pratiquement n’importe quel client REST, par exemple, votre propre client d’API, l’outil de ligne de commande cURL ou la bibliothèque curl pour PHP. Nous allons utiliser l’outil Workbench comme application cliente REST.
Le REST Apex prend en charge deux formats pour les représentations de ressources : JSON et XML. Par défaut, les représentations JSON sont transmises dans le corps d’une requête ou d’une réponse, et le format est indiqué par la propriété Content-Type
de l’en-tête HTTP. Le JSON étant plus facile à lire et à comprendre que le XML, cette unité utilise exclusivement le JSON. À cette étape, vous envoyez un enregistrement de requête au format JSON.
Le REST Apex prend en charge OAuth 2.0 et les mécanismes d’authentification de session. Pour le dire simplement, cela signifie que nous utilisons les normes de l’industrie pour que votre application et vos données restent sécurisées. Heureusement, vous pouvez utiliser Workbench pour simplifier les tests. Workbench est une suite d’outils Web performants qui offre la possibilité aux administrateurs et développeurs d’interagir avec des organisations via des API Lightning Platform. Avec Workbench, vous utilisez l’authentification de session lorsque vous vous connectez à Salesforce avec votre nom d’utilisateur et votre mot de passe. Et vous employez REST Explorer pour appeler votre service REST.
- Naviguez vers https://workbench.developerforce.com/login.php.
- Pour Environnement, sélectionnez Production.
- Sélectionnez la toute dernière version d’API dans la liste déroulante Version d’API.
- Acceptez les conditions du service, cliquez sur Login with Salesforce.
- Pour permettre au Workbench d'accéder à vos informations, cliquez sur Allow.
- Saisissez vos informations de connexion, puis cliquez sur Se connecter à Salesforce.
- Une fois connecté, sélectionnez Utilitaires | REST Explorer.
- Sélectionnez POST.
- Le chemin d’URL que REST Explorer accepte est relatif à l’URL d’instance de votre organisation. Ne fournissez que le chemin ajouté à l’URL d’instance. Dans le champ de saisie Relative URI (URI relatif), remplacez l’URI par défaut par
/services/apexrest/Cases/
.
- Pour le corps de la requête, insérez la représentation de chaîne JSON suivante qui concerne l’objet à insérer.
{ "subject" : "Bigfoot Sighting!", "status" : "New", "origin" : "Phone", "priority" : "Low" }
- Cliquez sur Execute (Exécuter).
Cette invocation appelle la méthode associée à la méthode HTTP POST, c’est-à-dire la méthodecreateCase
.
- Pour afficher la réponse renvoyée, cliquez sur Show Raw Response (Afficher la réponse brute).
La réponse renvoyée sera semblable à cette réponse. La réponse contient l’ID du nouvel enregistrement de requête. Votre valeur d’ID sera probablement différente de50061000000t7kYAAQ
. Enregistrez votre valeur d’ID à utiliser lors des étapes suivantes.HTTP/1.1 200 OK Date: Wed, 07 Oct 2015 14:18:20 GMT Set-Cookie: BrowserId=F1wxIhHPQHCXp6wrvqToXA;Path=/;Domain=.salesforce.com;Expires=Sun, 06-Dec-2015 14:18:20 GMT Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Type: application/json;charset=UTF-8 Content-Encoding: gzip Transfer-Encoding: chunked "50061000000t7kYAAQ"
Récupération de données avec une méthode GET personnalisée
En suivant des étapes similaires aux précédentes, utilisez Workbench pour invoquer la méthode HTTP GET.
- Dans Workbench, sélectionnez GET.
- Saisissez l’URI
/services/apexrest/Cases/<ID d’enregistrement>
, en remplaçant<ID d’enregistrement>
par l’ID de l’enregistrement que vous avez créé à l’étape précédente.
- Cliquez sur Exécuter. Cette invocation appelle la méthode associée à la méthode HTTP GET, c’est-à-dire la méthode
getCaseById
.
- Pour afficher la réponse renvoyée, cliquez sur Show Raw Response (Afficher la réponse brute).
La réponse renvoyée sera semblable à cette réponse. La réponse contient les champs que la méthode a demandés pour le nouvel enregistrement de requête.HTTP/1.1 200 OK Date: Wed, 07 Oct 2015 14:28:20 GMT Set-Cookie: BrowserId=j5qAnPDdRxSu8eHGqaRVLQ;Path=/;Domain=.salesforce.com;Expires=Sun, 06-Dec-2015 14:28:20 GMT Expires: Thu, 01 Jan 1970 00:00:00 GMT Content-Type: application/json;charset=UTF-8 Content-Encoding: gzip Transfer-Encoding: chunked { "attributes" : { "type" : "Case", "url" : "/services/data/v34.0/sobjects/Case/50061000000t7kYAAQ" }, "CaseNumber" : "00001026", "Subject" : "Bigfoot Sighting!", "Status" : "New", "Origin" : "Phone", "Priority" : "Low", "Id" : "50061000000t7kYAAQ" }
Mettre à jour des données avec une méthode PUT ou PATCH personnalisée
Vous pouvez mettre à jour des enregistrements avec la méthode HTTP PUT ou PATCH. La méthode PUT met à jour l’intégralité de la ressource si elle existe ou crée la ressource si elle n’existe pas. PUT est essentiellement une méthode d’upsert. La méthode PATCH ne met à jour que les portions spécifiées d’une ressource existante. En Apex, les opérations de mise à jour ne mettent à jour que les champs spécifiés et n’écrasent pas l’intégralité de l’enregistrement. Nous allons développer un peu de code Apex pour déterminer si nos méthodes procèdent à une mise à jour ou à un upsert.
Mettre à jour des données avec la méthode PUT
La méthode upsertCase
que vous avez ajoutée à la classe CaseManager
implémente l’action PUT. Cette méthode est incluse ici afin que vous puissiez vous y reporter. La méthode utilise la méthode DML Apex upsert
intégrée pour créer ou remplacer les champs d’enregistrement de requête en associant la valeur d’ID. Si un ID est envoyé dans le corps de la requête, il remplit le sObject. Sinon, le sObject est créé sans ID. La méthode upsert
est invoquée avec le sObject de la requête rempli, et l’instruction DML fait le reste. Voilà !
@HttpPut global static ID upsertCase(String subject, String status, String origin, String priority, String id) { Case thisCase = new Case( Id=id, Subject=subject, Status=status, Origin=origin, Priority=priority); // Match case by Id, if present. // Otherwise, create new case. upsert thisCase; // Return the case ID. return thisCase.Id; }
Pour invoquer la méthode PUT :
- Dans Workbench REST Explorer, sélectionnez PUT.
- Pour l’URI, saisissez
/services/apexrest/Cases/
.
- La méthode
upsertCase
s’attend à ce que les valeurs de champ soient transmises dans le corps de la requête. Ajoutez ce qui suit pour le corps de la requête, puis remplacez<ID d’enregistrement>
par l’ID de l’enregistrement de requête que vous avez créé précédemment.{ "id": "<Record_ID>", "status" : "Working", "subject" : "Bigfoot Sighting!", "priority" : "Medium" }
- Cliquez sur Execute (Exécuter).
Cette requête invoque la méthodeupsertCase
à partir de votre service REST. Les champs État, Objet et Priorité sont mis à jour. L’objet est mis à jour, même si sa valeur correspond à l’ancien objet. Par ailleurs, étant donné que le corps de la requête ne contenait pas de valeur pour le champ Case Origin (Origine de la requête), le paramètre origine de la méthodeupsertCase
est nul. Par conséquent, lorsque l’enregistrement est mis à jour, le champ Origine est effacé. Pour vérifier ces champs, affichez cet enregistrement dans Salesforce en accédant à https://VotreInstance.my.salesforce.com/<ID d’enregistrement>.
Mettre à jour des données avec la méthode PATCH
Comme alternative à la méthode PUT, vous pouvez utiliser la méthode PATCH afin de mettre à jour les champs d’enregistrement. Vous pouvez implémenter la méthode PATCH de différentes manières. L’une d’entre elles consiste à spécifier les paramètres dans la méthode pour chaque champ à mettre à jour. Par exemple, vous pouvez créer une méthode pour mettre à jour la priorité d’une requête avec cette signature : updateCasePriority(String priority)
[updateCasePriority(Priorité de chaîne)]. Pour mettre à jour plusieurs champs, vous pouvez lister tous les champs souhaités ne tant que paramètres.
Une autre approche, qui offre plus de flexibilité, consiste à transmettre les champs en tant que paires nom/valeur JSON dans le corps de la requête. De cette manière, la méthode peut accepter un nombre arbitraire de paramètres, et les paramètres ne sont pas fixes dans la signature de la méthode. Un autre avantage de cette approche, c’est qu’aucun champ n’est effacé accidentellement en raison du fait qu’il n’est pas inclus dans la chaîne JSON. La méthode updateCaseFields
que vous avez ajoutée à la classe CaseManager
utilise cette deuxième approche. Cette méthode désérialise la chaîne JSON du corps de la requête en un mappage de paires nom/valeur et utilise la méthode sObject put
pour définir les champs.
@HttpPatch global static ID updateCaseFields() { RestRequest request = RestContext.request; String caseId = request.requestURI.substring( request.requestURI.lastIndexOf('/')+1); Case thisCase = [SELECT Id FROM Case WHERE Id = :caseId]; // Deserialize the JSON string into name-value pairs Map<String, Object> params = (Map<String, Object>)JSON.deserializeUntyped(request.requestbody.tostring()); // Iterate through each parameter field and value for(String fieldName : params.keySet()) { // Set the field and value on the Case sObject thisCase.put(fieldName, params.get(fieldName)); } update thisCase; return thisCase.Id; }
Pour invoquer la méthode PATCH :
- Dans Workbench REST Explorer, cliquez sur PATCH.
- Pour l’URI, saisissez
/services/apexrest/Cases/<ID d’enregistrement>
. Remplacez<ID d’enregistrement>
par l’ID de l’enregistrement de requête que vous avez créé précédemment. Entrez le code JSON suivant dans le corps de la requête.Ce code JSON comprend deux valeurs de champ : status et priority. La méthode{ "status" : "Escalated", "priority" : "High" }
updateCaseFields
récupère ces valeurs à partir du code JSON soumis, puis elles sont utilisées pour spécifier les champs à mettre à jour dans l’objet.
- Cliquez sur Execute (Exécuter).
Cette requête invoque la méthodeupdateCaseFields
de votre service REST. Les champs État et Priorité de l’enregistrement de requête sont mis à jour pour adopter les nouvelles valeurs. Pour vérifier ces champs, affichez cet enregistrement dans Salesforce en accédant à https://VotreInstance.my.salesforce.com/<ID d’enregistrement>.
Tester votre classe REST Apex
Le test de votre classe REST Apex est similaire au test de toute autre classe Apex. Il suffit d’appeler les méthodes de classe en transmettant les valeurs de paramètres puis en vérifiant les résultats. Pour les méthodes n’acceptant pas de paramètres ou reposant sur des informations de la requête REST, créez une requête REST de test.
En règle générale, voici comment vous testez vos services REST Apex. Pour simuler une requête REST, créez RestRequest
dans la méthode test, puis définissez les propriétés de la requête de la manière suivante. Vous pouvez aussi ajouter les paramètres que vous « transmettez » dans la requête pour simuler les paramètres d’URI.
// Set up a test request RestRequest request = new RestRequest(); // Set request properties request.requestUri = 'https://yourInstance.my.salesforce.com/services/apexrest/Cases/' + recordId; request.httpMethod = 'GET'; // Set other properties, such as parameters request.params.put('status', 'Working'); // more awesome code here.... // Finally, assign the request to RestContext if used RestContext.request = request;
Si la méthode que vous testez accède aux valeurs de la requête par le biais de RestContext
, affectez la requête à RestContext
pour la remplir (RestContext.request = request;
).
Enregistrons maintenant la classe complète dans la Developer Console et générons les résultats.
- Dans Developer Console, sélectionnez File (Fichier) | New (Nouveau) | Apex Class (Classe Apex).
- Pour Class Name (Nom de classe), saisissez
CaseManagerTest
, puis cliquez sur OK.
- Remplacez le code généré automatiquement par la définition de classe suivante :
@IsTest private class CaseManagerTest { @isTest static void testGetCaseById() { Id recordId = createTestRecord(); // Set up a test request RestRequest request = new RestRequest(); request.requestUri = 'https://yourInstance.my.salesforce.com/services/apexrest/Cases/' + recordId; request.httpMethod = 'GET'; RestContext.request = request; // Call the method to test Case thisCase = CaseManager.getCaseById(); // Verify results Assert.isTrue(thisCase != null); Assert.areEqual('Test record', thisCase.Subject); } @isTest static void testCreateCase() { // Call the method to test ID thisCaseId = CaseManager.createCase( 'Ferocious chipmunk', 'New', 'Phone', 'Low'); // Verify results Assert.isTrue(thisCaseId != null); Case thisCase = [SELECT Id,Subject FROM Case WHERE Id=:thisCaseId]; Assert.isTrue(thisCase != null); Assert.areEqual(thisCase.Subject, 'Ferocious chipmunk'); } @isTest static void testDeleteCase() { Id recordId = createTestRecord(); // Set up a test request RestRequest request = new RestRequest(); request.requestUri = 'https://yourInstance.my.salesforce.com/services/apexrest/Cases/' + recordId; request.httpMethod = 'DELETE'; RestContext.request = request; // Call the method to test CaseManager.deleteCase(); // Verify record is deleted List<Case> cases = [SELECT Id FROM Case WHERE Id=:recordId]; Assert.isTrue(cases.size() == 0); } @isTest static void testUpsertCase() { // 1. Insert new record ID case1Id = CaseManager.upsertCase( 'Ferocious chipmunk', 'New', 'Phone', 'Low', null); // Verify new record was created Assert.isTrue(Case1Id != null); Case case1 = [SELECT Id,Subject FROM Case WHERE Id=:case1Id]; Assert.isTrue(case1 != null); Assert.areEqual(case1.Subject, 'Ferocious chipmunk'); // 2. Update status of existing record to Working ID case2Id = CaseManager.upsertCase( 'Ferocious chipmunk', 'Working', 'Phone', 'Low', case1Id); // Verify record was updated Assert.areEqual(case1Id, case2Id); Case case2 = [SELECT Id,Status FROM Case WHERE Id=:case2Id]; Assert.isTrue(case2 != null); Assert.areEqual(case2.Status, 'Working'); } @isTest static void testUpdateCaseFields() { Id recordId = createTestRecord(); RestRequest request = new RestRequest(); request.requestUri = 'https://yourInstance.my.salesforce.com/services/apexrest/Cases/' + recordId; request.httpMethod = 'PATCH'; request.addHeader('Content-Type', 'application/json'); request.requestBody = Blob.valueOf('{"status": "Working"}'); RestContext.request = request; // Update status of existing record to Working ID thisCaseId = CaseManager.updateCaseFields(); // Verify record was updated Assert.isTrue(thisCaseId != null); Case thisCase = [SELECT Id,Status FROM Case WHERE Id=:thisCaseId]; Assert.isTrue(thisCase != null); Assert.areEqual(thisCase.Status, 'Working'); } // Helper method static Id createTestRecord() { // Create test record Case caseTest = new Case( Subject='Test record', Status='New', Origin='Phone', Priority='Medium'); insert caseTest; return caseTest.Id; } }
- Appuyez sur CTRL+S pour enregistrer.
- Exécutez tous les tests de votre organisation en sélectionnant Test | Tout exécuter.
Les résultats des tests s’affichent dans l’onglet Tests. Une fois l’exécution des tests terminée, vérifiez la ligne CaseManager dans le volet Couverture globale du code. Il est couvert à 100 %.
En savoir plus...
Informations complémentaires sur les types de données et espaces de noms pris en charge dans le REST Apex, les API Salesforce et les considérations de sécurité.
Types de données pris en charge pour le REST Apex
Le REST Apex prend en charge les types de données suivants les paramètres et les valeurs retournées.
- Primitifs Apex (à l’exception d’Object et Blob).
- sObject
- Listes ou mappages de primitifs ou de sObject Apex (seuls les mappages à clés de chaîne sont pris en charge).
- Types définis par l’utilisateur contenant les variables membres des types listés ci-dessus.
Espaces de noms des points de terminaison REST Apex
Les méthodes REST Apex peuvent être utilisées dans des packages gérés et non gérés. Lorsque vous appelez les méthodes REST Apex contenues dans un package géré, vous devez inclure l’espace de noms de ce package géré dans l’URL d’appel REST. Par exemple, si la classe est contenue dans un espace de noms de package géré nommé packageNamespace
alors que les méthodes REST Apex utilisent un mappage d’URL avec /MyMethod/*
, l’URL utilisée via REST pour appeler ces méthodes prendrait la forme https://instance.my.salesforce.com/services/apexrest/packageNamespace/MyMethod/.
Services Web Apex personnalisés et API Salesforce
Au lieu d’utiliser du code Apex personnalisé pour les services REST et SOAP, les applications externes peuvent intégrer Salesforce grâce aux API REST et SOAP de Salesforce. Avec ces API, vous pouvez créer, mettre à jour et supprimer des enregistrements. Cependant, l’avantage de l’utilisation des services Web Apex réside dans le fait que les méthodes Apex peuvent encapsuler une logique complexe. Cette logique est masquée dans l’application consommatrice. Par ailleurs, les opérations de classe Apex peuvent s’avérer plus rapides que la création d’appels d’API individuels, car les allers-retours intervenant entre le client et les serveurs Salesforce sont moins nombreux. Avec un appel de service Web Apex , une seule requête est envoyée, et toutes les opérations de la méthode sont effectuées sur le serveur.
Considérations sécurité concernant les services Web Apex
Le contexte Sécurité sous lequel les méthodes du service Web s’exécutent diffère de celui des API Salesforce. Contrairement aux API Salesforce , les méthodes de service Web Apex s’exécutent avec des privilèges système et ne respectent pas les autorisations Champs et objets de l’utilisateur. Cependant, les méthodes de service Web Apex appliquent des règles de partage lorsqu’elles sont déclarées avec le mot clé with sharing
.
Ressources
-
Apex Developer Guide: Introduction to Apex REST
-
Apex Developer Guide: Exposing Apex Classes as REST Web Services
-
Apex Developer Guide: Exposing Apex Methods as SOAP Web Services
-
REST API Developer Guide: Using cURL in the REST Examples
-
Creating REST APIs Using Apex REST
-
RFC7231 - Information about HTTP 1.1 (including request methods and responses)
-
Wikipedia : Representational state transfer
-
Développeurs Salesforce : API REST
-
cURL Documentation