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 classeRestClient
- Émettre une requête REST asynchrone avec les classesRestClientetRestRequest
- Recevoir et traiter une réponse REST avec la classeRestResponse
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 packagecom.salesforce.androidsdk.rest.
- ClientManager : sert de fabrique pour les instancesRestClient. Elle gère également les connexions au compte et les liaisons avec le serveur Salesforce.
-
RestClient : gère le protocole permettant d’envoyer les requêtes API REST au serveur Salesforce.
Ne créez pas directement des instances deRestClient. À la place, appelez la méthodeClientManager.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.
- RestResponse : contient la réponse au format demandé. La classeRestRequestcrée des instancesRestResponseet les renvoie à votre application par le biais de l’implémentation de l’interfaceRestClient.AsyncRequestCallback.
Voici un diagramme animé qui montre ce flux en action.
- L’application appelle une méthode statique sur la classeRestRequestpour créer une instanceRestRequestconfigurée.
- L’application transmet la nouvelle instanceRestRequestet une instance de l’interfaceAsyncRequestCallbackà la méthodeRestClient.sendAsync().
- Le kit de développement Mobile SDK envoie la requête REST présentée dans l’objetRestRequestau service Cloud de Salesforce.
- Salesforce traite la requête et renvoie une réponse JSON à l’application.
- Le kit de développement Mobile SDK insère la réponse JSON dans un nouvel objetRestResponse.
- Le kit de développement Mobile SDK transmet le nouvel objetRestResponseà l’implémentationAsyncRequestCallbackde l’application pour qu’elle le consomme.
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()
- Dans la fenêtre du projet Android Studio, agrandissez .
- Double-cliquez sur MainActivity.
- Recherchez la méthodeonFetchContactsClick. Vous remarquerez que cette petite méthode appelle une méthodesendRequest()avec une instruction SOQL.
public void onFetchContactsClick(View v) throws UnsupportedEncodingException { sendRequest("SELECT Name FROM Contact"); }
- Cliquez avec le bouton droit sur « sendRequest », puis sélectionnez . En fait,sendRequest()est une méthode privée dans votre classeMainActivity. Une bonne nouvelle, car elle vous appartient. Nous allons la modifier plus loin !
- client : une instance privée, délimitée par une classe, deRestClient. Cet objet est automatiquement instancié durant l’initialisation de l’application
- restRequest : une nouvelle instanceRestRequest.
- RestRequest.getRequestForQuery() : une méthode d’usineRestRequeststatique qui crée l’instanceRestRequest.
- AsyncRequestCallback : l’implémentation au sein de votre application de l’interface de rappel de la réponse REST.
Création de la requête REST
RestRequest restRequest = RestRequest.getRequestForQuery( getString(R.string.api_version), soql);
Envoi de la requête REST
client.sendAsync(restRequest, new AsyncRequestCallback() { ...
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
@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); } } }); }
@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(); } }); }