Suivez votre progression
Accueil Trailhead
Accueil Trailhead

Accès aux données Salesforce via les API REST

Objectifs de formation

Une fois cette unité terminée, vous pourrez :

  • Instancier une requête REST avec la classe RestClient
  • Émettre une requête REST asynchrone avec les classes RestClient et RestRequest
  • Recevoir et traiter une réponse REST avec la classe RestResponse

Utilisation des API REST

Lorsque vous êtes prêt à accéder aux données Salesforce dans votre application, vous appelez les Salesforce. Généralement, les API REST sont relativement accessibles. Ainsi, les développeurs peuvent y accéder manuellement via des appels réseau rudimentaires. Mais cela ne vous concerne pas : le kit de développement Mobile SDK se charge des tâches fastidieuses pour vous.

Voici un résumé des classes qui gèrent les appels des API REST. Toutes les classes résident dans le package com.salesforce.androidsdk.rest.

  • ClientManager, qui sert de fabrique pour les instances RestClient. Elle gère également les connexions au compte et les liaisons avec le serveur Salesforce.
  • RestClient, qui gère le protocole permettant d’envoyer les requêtes API REST au serveur Salesforce.

    Ne créez pas directement d'instances de RestClient. Appelez plutôt la méthode ClientManager.getRestClient().

  • RestRequest : représente les demandes d’API REST formatées à partir des données que vous fournissez. Elle sert également de fabrique pour ses instances.
    Important

    Important

    Ne créez pas directement d'instances de RestRequest. Appelez plutôt une fonction d'obtention statique appropriée RestRequest telle que RestRequest.getRequestForCreate().

  • RestResponse : contient la réponse au format demandé. La classe RestRequest crée des instances RestResponse et les renvoie à votre application par le biais de l’implémentation de l’interface RestClient.AsyncRequestCallback.

Voici un diagramme animé qui montre ce flux en action.

Flux d’exécution de l’API REST (Android)
  1. L’application appelle une méthode statique dans la classe RestRequest pour créer une instance RestRequest configurée.
  2. La classe transmet la nouvelle instance RestRequest et une instance de l’interface AsyncRequestCallback à la méthode RestClient.sendAsync().
  3. Le kit de développement Mobile SDK envoie la requête REST présentée dans l’objet RestRequest au service cloud de Salesforce.
  4. Salesforce traite la requête et renvoie une réponse JSON à l’application.
  5. Le kit de développement Mobile SDK insère la réponse JSON dans un nouvel objet RestResponse.
  6. Le kit transmet le nouvel objet RestResponse à l’implémentation AsyncRequestCallback de l’application pour consommation.

Vous suivez toujours ? Laissons de côté le niveau conceptuel pour observer l’activité de ces informations dans votre véritable application.

La méthode sendRequest()

Votre classe MainActivity envoie des requêtes REST, puis utilise les réponses REST pour renseigner sa vue de liste. Revenons au code MainActivity pour suivre son flux.
  1. Dans la fenêtre du projet Android Studio, agrandissez app | src | com.mytrail.android.
  2. Double-cliquez sur MainActivity.
  3. Recherchez la méthode onFetchContactsClick. Notez que cette petite méthode appelle une méthode sendRequest() avec une instruction SOQL.
    public void onFetchContactsClick(View v) throws UnsupportedEncodingException {
        sendRequest("SELECT Name FROM Contact");
    } 
  4. Cliquez avec le bouton droit sur « sendRequest », puis sélectionnez Go To | Implementation(s). En fait, sendRequest() est une méthode privée dans votre classe MainActivity. Une bonne nouvelle, car elle vous appartient. Nous allons la modifier plus loin !
Dans la méthode sendRequest(), vous pouvez observer les classes REST du kit de développement Mobile SDK. Ici, les principaux acteurs sont :
  • Client : une instance privée, délimitée par la classe, de RestClient. Cet objet est automatiquement instancié durant l’initialisation de l’application
  • restRequest : une nouvelle instance RestRequest
  • RestRequest.getRequestForQuery() : une méthode d’usine RestRequest statique qui crée l’instance RestRequest
  • AsyncRequestCallback : l’implémentation de l’interface de rappel de la réponse REST de votre application

Création de la requête REST

Dans sendRequest(), la méthode d’usine RestRequest.getRequestForQuery() prend une chaîne SOQL et l’enveloppe dans un objet RestRequest.
RestRequest restRequest = 
    RestRequest.getRequestForQuery(
        getString(R.string.api_version), soql); 
L’avantage de l’utilisation de méthodes d’usine RestRequest est la génération d’un objet prêt pour le réseau, qui connaît déjà les paramètres HTTP attendus par le serveur Salesforce.

Envoi de la requête REST

Pour envoyer la requête à Salesforce, vous transmettez l’objet RestRequest à la méthode RestClient.sendAsync().
client.sendAsync(restRequest, new AsyncRequestCallback()
    { 
    ...
Le code du kit de développement Mobile SDK crée pour vous l’objet client tout en initialisant votre activité. Le deuxième paramètre, de type AsyncRequestCallback, est une instance d’une interface virtuelle conçue pour recevoir des réponses REST. Dans cet exemple, AsyncRequestCallback est implémenté et instancié en ligne.

Ici, le préfixe « async » est toujours présent. Il doit avoir une importance, non ? Lorsque vous envoyez une requête de façon asynchrone, cela signifie que le code de votre application ne s’interrompt pas pour attendre la réponse. Lorsque la réponse arrive, le kit de développement Mobile SDK appelle l’une de vos méthodes de rappel, et l’application suspend brièvement son activité pour traiter la réponse. Vous devez envoyer les requêtes de façon asynchrone lorsque votre code est exécuté dans le thread principal (interface utilisateur) .

Capture et traitement de la réponse REST

Lorsque Salesforce renvoie la réponse REST, l’objet RestClient la transmet à votre implémentation AsyncRequestCallback. Dans l’interface AsyncRequestCallback, vous définissez comment votre application gère la réponse REST de Salesforce. Vous traitez les réponses REST réussies dans la méthode onSuccess() :
@Override
public void onSuccess(RestRequest request,
    final RestResponse result) {
    result.consumeQuietly(); // consume before going back to main thread
    runOnUiThread(new Runnable() {
        @Override
        public void run() { 
            try {
                listAdapter.clear();
                JSONArray records = 
                    result.asJSONObject().getJSONArray("records");
                for (int i = 0; i < records.length(); i++) {
                    listAdapter.add(
                        records.getJSONObject(i).getString("Name"));
                } 
             } catch (Exception e) {
                 onError(e);
             }
        }
    });
}
... et vous récupérez les requêtes échouées dans la méthode onError().
@Override
public void onError(Exception exception)
{
    runOnUiThread((new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this,
            MainActivity.this.getString(R.string.sf__generic_error, 
                exception.toString()),
            Toast.LENGTH_LONG).show();
        }
    });
}
Notez que la réponse REST arrive sous le format JSON. Par conséquent, elle est facile à analyser avec un code écrit par une personne. Si la requête réussit, l’application extrait les valeurs du champ Name et renseigne la vue de liste de l’interface utilisateur. Si la requête échoue, l’application affiche un message d'erreur flottant.