Acceder a datos de Salesforce mediante API de REST
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Generar una solicitud REST con la interfaz RestClient.
- Recibir la respuesta de REST desde Salesforce.
- Utilizar Mobile SDK para procesar la respuesta REST.
Siga el proceso con Trail Together
¿Desea seguir el proceso con un experto a medida que realiza este paso? Mire este video que forma parte de la serie Trail Together.
(Este video comienza en el minuto 16:05, en caso de que desee rebobinar y mirar el comienzo del paso nuevamente).
Envío de solicitudes REST
En sus vistas personalizadas, accede a los datos de la organización de Salesforce mediante la API de Salesforce. Echemos un vistazo más de cerca a cómo llama a la API de Salesforce en las aplicaciones Swift de Mobile SDK.
Uso del publicador RestClient
Para acceder a datos de Salesforce, envía solicitudes de REST a Salesforce y recibe las respuestas en su aplicación. ¿Cómo codifica solicitudes de red, las envía y las procesa en sus respuestas?
Las aplicaciones de interfaz de usuario de Swift utilizan una arquitectura de vista y modelo. Una clase de vista define formatos de pantalla en SwiftUI y, en el tiempo de ejecución, llama a una clase de modelo asociada para los datos que completa sus interfaces. En el proyecto de plantilla Swift de Mobile SDK, las clases de modelos están en la carpeta del proyecto Modelos. Por ejemplo, el archivo ContactsForAccountModel.swift define el código que solicita una lista de contactos para una cuenta. Cuando llega la respuesta, la clase ContactsForAccountModel
procesa los registros devueltos para enviar una lista de información de contacto a la clase ContactsForAccountListView
.
RestClient
es su punto de entrada a todos los servicios REST. Las aplicaciones del Mobile SDK utilizan métodos RestClient para fabricar y enviar solicitudes de REST. Siempre accederá únicamente a esta clase a través de su instancia compartida:
RestClient.shared()
fetchContactsForAccount(_:)
.- Cree e inicialice una instancia
RestRequest
.RestClient
ofrece una amplia variedad de métodos generadores con este fin. Nuestro ejemplo crea una solicitud de consulta SOQL, pero puede elegir cualquier métodoRestClient
que se ajuste a sus fines. - Envíe el objeto de solicitud a Salesforce.
RestClient
autentica automáticamente la solicitud con las credenciales de usuario actuales.
- En Xcode, abra el archivo ContactsForAccountModel.swift.
- Busque el método
fetchContactsForAccount(_:)
. La implementación lee algo parecido a lo siguiente:class ContactsForAccountModel: ObservableObject { @Published var contacts: [Contact] = [] var account: Account? private var contactsCancellable: AnyCancellable? func fetchContactsForAccount(){ guard let acct = self.account else {return} let request = RestClient.shared.request(forQuery: "SELECT id, firstName, lastName, phone, email, mailingStreet, mailingCity, mailingState, mailingPostalCode FROM Contact WHERE AccountID = '\(acct.id)'", apiVersion: nil) contactsCancellable = RestClient.shared.publisher(for: request) .receive(on: RunLoop.main) .tryMap({ (response) -> Data in response.asData() }) .decode(type: ContactResponse.self, decoder: JSONDecoder()) .map({ (record) -> [Contact] in record.records }) .catch( { error in Just([]) }) .assign(to: \.contacts, on:self) } } }
RestClient
. Puede ver esta llamada en la declaración larga que comienza con: let request = RestClient.shared.request(forQuery:...
RestRequest
generado contiene una solicitud REST preformateada basada en la cadena de SOQL proporcionada.RestClient
. Cuando llama a este publicador, en efecto, solo le dice, "esta es mi solicitud". Luego, el publicador controla la llamada de red para enviar su solicitud a Salesforce y determinar la respuesta de la red antes de entregarla a su código en espera.Puede ver la llamada al publicador en la línea que comienza con:
contactsCancellable = RestClient.shared.publisher(for: request)
Es posible que reconozca la secuencia de llamadas que aparece a continuación como una cadena de llamadas, lo cual es una construcción común y útil para los publicadores de Swift Combine. Esta cadena de llamadas controla la respuesta de red asincrónica como un objeto Future
que eventualmente termina o falla. En cada una de las cadenas de llamada, la acción se realiza en el objeto predeterminado actual. Este objeto puede restablecerse con el valor de retorno de la llamada anterior en la cadena. Si la llamada de red fracasa o Salesforce devuelve un error, el procesamiento se instruye al bloque .catch
.
Para tener una idea detallada de cómo funciona la cadena de llamadas, a continuación, encontrará una lista ampliamente comentada de la secuencia.
// Use the RestClient publisher to send the request and return the raw REST response contactsCancellable = RestClient.shared.publisher(for: request) // Receive the raw REST response object .receive(on: RunLoop.main) // Try to convert the raw REST response to Data // Throw an error in the event of failure .tryMap({ (response) -> Data in // Return the response as a Data byte buffer response.asData() }) // Decode the Data object as JSON to produce an array // of Contacts formatted as a ContactResponse object .decode(type: ContactResponse.self, decoder: JSONDecoder()) // Map the JSON array of Contacts .map({ (record) -> [Contact] in // Copy the Contact array to the records // member of ContactResponse record.records }) // If an error is thrown, publish an empty array .catch( { error in Just([]) // Combine publisher that rescues a failed publisher }) // Store the array of contacts in the model’s published contacts // property for use by ContactsForAccountListView .assign(to: \.contacts, on:self) }
Otras opciones
Si examina otras clases de modelos en la aplicación de plantilla, verá que RestClient.shared.publisher
no es el único medio para obtener datos de Salesforce. Por ejemplo, AccountsListModel
usa dos otros publicadores:
- Un publicador SmartStore
- Un publicador Mobile Sync
En este punto, no se espera que conozca SmartStore y Mobile Sync, pero, en pocas palabras, son las dos funciones offline de Mobile SDK. SmartStore es una configuración de almacenamiento local que funciona como un repositorio offline para los registros de Salesforce. Debido a que este repositorio cifrado reside en el dispositivo móvil, SmartStore permite al cliente continuar trabajando incluso si la conectividad de la red falla. Mientras tanto, Mobile Sync se encarga de realizar las siguientes tareas complejas:
- Obtener registros de Salesforce
- Almacenar los registros en sopas SmartStore (similar a las tablas de la base de datos)
- Garantizar que los registros de SmartStore y los registros del servidor permanezcan sincronizados cuando el cliente descarga registros nuevos o carga cambios locales
Mobile SDK define a estos publicadores en extensiones de clase de Swift. Si quiere saber cómo ocurre este proceso en detalle, en Xcode puede hacer clic con el botón derecho del ratón en cualquiera de los vars publisher
y seleccionar Jump to Definition. En ambos casos, el código es escaso: difiere de los métodos SmartStore o Mobile Sync para la funcionalidad real. Para obtener más información sobre estos publicadores, sus tecnologías subyacentes y otras formas de codificar las interacciones de la API de REST, siga los vínculos de Recursos. Lo más probable es que le guste utilizar estos publicadores elegantes y eficientes.
Recursos
- Guías de desarrollador: Plantilla Swift nativa
- Guías de desarrollador: Control de solicitudes REST
- Guías de desarrollador: Control de respuestas REST
- Guías de desarrollador: Using SFRestRequest Methods
- Guías de desarrollador: Supported Operations
- Guías de desarrollador: REST API Developer’s Guide
- Trailhead: Fundamentos de las API
- Vínculo externo Centro de capacitación de Postman