Skip to main content

Acceder a los datos de Salesforce mediante API de REST

Objetivos de aprendizaje

Después de completar esta unidad, podrá:

  • Crear una instancia de una solicitud REST con la clase RestClient.
  • Generar una solicitud REST asíncrona con las clases RestClient y RestRequest.
  • Recibir y procesar una respuesta REST con la clase RestResponse.

Uso de API de REST

Cuando esté listo para acceder a los datos de Salesforce en su aplicación, llame a las Salesforce. Por regla general, las API de REST son lo bastante sencillas para que los desarrolladores puedan acceder a ellas manualmente mediante llamadas de red rudimentarias. No obstante, no necesita hacer esto, ya que dispone de Mobile SDK para que realice las tareas tediosas por usted.

Este es un resumen de las clases que controlan las llamadas de API de REST. Todas estas clases residen en el paquete com.salesforce.androidsdk.rest.

  • ClientManager. Se usa como generador de instancias de RestClient. Además, controla los inicios de sesión de cuenta y el protocolo de enlace con el servidor de Salesforce.
  • RestClient. Controla el protocolo para el envío de solicitudes de API de REST al servidor de Salesforce.

    No cree instancias de RestClient directamente. En lugar de esto, llame al método ClientManager.getRestClient().

  • RestRequest. Representa solicitudes de API de REST con formato a partir de los datos que proporcione. Además, funciona como un generador de sus propias instancias.
    Importante

    Importante

    No cree instancias de RestRequest directamente. En lugar de esto, llame a una función estática de captador de RestRequest apropiada, como RestRequest.getRequestForCreate().

  • RestResponse: Contiene el contenido de la respuesta en el formato solicitado. La clase RestRequest crea instancias de RestResponse y las devuelve a la aplicación mediante la implementación de la interfaz RestClient.AsyncRequestCallback.

El siguiente es un diagrama animado en el que se muestra este flujo en acción.

Flujo en tiempo de ejecución de API de REST (Android)
  1. La aplicación llama a un método estático en la clase RestRequest para crear una instancia de RestRequest configurada.
  2. La aplicación pasa la nueva instancia de RestRequest y una instancia de la interfaz AsyncRequestCallback al método RestClient.sendAsync().
  3. Mobile SDK envía la solicitud REST presentada en el objeto RestRequest al servicio en la nube de Salesforce.
  4. Salesforce procesa la solicitud y devuelve una respuesta JSON a la aplicación.
  5. Mobile SDK empaqueta la respuesta JSON en un nuevo objeto RestResponse.
  6. Mobile SDK pasa el nuevo objeto RestResponse a la implementación AsyncRequestCallback de la aplicación para su consumo.

¿Sigue despierto? Vamos a ir más allá del nivel conceptual para ver esta información en acción en el mundo real de su aplicación.

Método sendRequest()

La clase MainActivity envía solicitudes REST y, a continuación, usa las respuestas REST para completar su vista de lista. Retrocedamos al código de MainActivity para seguir este flujo.
  1. En la ventana del proyecto de Android Studio, expanda app | src | com.mytrail.android.
  2. Haga doble clic en MainActivity.
  3. Busque el método onFetchContactsClick. Observe que este diminuto método llama al método sendRequest() con una declaración SOQL.
    public void onFetchContactsClick(View v) throws UnsupportedEncodingException {
        sendRequest("SELECT Name FROM Contact");
    } 
  4. Haga clic con el botón derecho en “sendRequest” y, a continuación, seleccione Go To | Implementation(s) (Ir a | Implementaciones). Ocurre que sendRequest() es un método privado en la clase MainActivity. Es estupendo que sea suyo, ya que vamos a cambiarlo más adelante.
El método sendRequest() es donde ve las clases REST de Mobile SDK en acción. Los elementos principales son:
  • client. Instancia de ámbito de clase privada de RestClient. En el caso de este objeto, se crea una instancia automáticamente durante la inicialización de la aplicación.
  • restRequest. Nueva instancia de RestRequest.
  • RestRequest.getRequestForQuery(). Método de generador RestRequest estático que crea la instancia de RestRequest.
  • AsyncRequestCallback. Implementación de la aplicación de la interfaz de devolución de llamada de respuesta REST.

Creación de la solicitud REST

En sendRequest(), el método de generador RestRequest.getRequestForQuery() usa una cadena SOQL y la incluye en un objeto RestRequest.
RestRequest restRequest = 
    RestRequest.getRequestForQuery(
        getString(R.string.api_version), soql); 
La ventaja de usar métodos de generador RestRequest es que el objeto generado está listo para la red, ya que conoce la configuración HTTP que espera el servidor de Salesforce.

Envío de la solicitud REST

Para enviar la solicitud a Salesforce, pase el objeto RestRequest al método RestClient.sendAsync().
client.sendAsync(restRequest, new AsyncRequestCallback()
    { 
    ...
El código de Mobile SDK crea el objeto client por usted mientras inicializa su actividad. El segundo parámetro, del tipo AsyncRequestCallback, es una instancia de una interfaz virtual diseñada para recibir respuestas REST. En este ejemplo, AsyncRequestCallback se implementa e instancia en línea.

El prefijo “async” se sigue mostrando aquí. Esto debe significar algo importante. Cuando envía una solicitud de forma asíncrona, el código de la aplicación no se pausa para esperar la respuesta. Cuando llega la respuesta, Mobile SDK llama a uno de los métodos de devolución de llamada y la aplicación suspende brevemente cualquier acción para procesar la respuesta. Debe enviar las solicitudes de forma asíncrona cuando la ejecución del código tenga lugar en el subproceso principal (IU).

Captura y procesamiento de la respuesta REST

Cuando Salesforce devuelve la respuesta REST, el objeto RestClient la reenvía a la implementación AsyncRequestCallback. En la interfaz AsyncRequestCallback, defina cómo controla la aplicación la respuesta REST de Salesforce. Puede controlar las respuestas REST correctamente en el método 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);
             }
        }
    });
}
de este modo, puede solucionar debidamente las solicitudes con errores en el método 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();
        }
    });
}
Observe que la respuesta REST llega en formato JSON, por lo que es fácil de analizar para los humanos que escriben código. Si la consulta se realiza correctamente, la aplicación extrae los valores del campo de nombre para completar la vista de lista de la interfaz de usuario. Si la consulta genera un error, la aplicación muestra un mensaje emergente que contiene el mensaje de error.
Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios