Acessar dados do Salesforce por APIs REST
Objetivos de aprendizagem
Após concluir esta unidade, você estará apto a:
- Emitir uma solicitação REST com a interface RestClient.
- Receber a resposta REST do Salesforce.
- Usar o Mobile SDK para processar a resposta REST.
Acompanhar com o Trail Together
Deseja acompanhar um especialista enquanto trabalha nesta etapa? Veja este vídeo que faz parte da série Trail Together.
(Este clipe começa na marca dos 16:05 minutos, caso você queira retroceder e ver o início da etapa novamente.)
Como enviar solicitações REST
Em suas visualizações personalizadas, você acessa os dados da organização do Salesforce por meio da API do Salesforce. Vamos ver melhor como você chama a API do Salesforce em aplicativos Swift do Mobile SDK.
Como usar o editor do RestClient
Para acessar dados do Salesforce, envie solicitações REST para o Salesforce e receba as respostas no aplicativo. Como você codifica solicitações de rede, envia-as e processa suas respostas?
Os aplicativos da interface do usuário do Swift usam a arquitetura de modelos de exibição. Uma classe de visualização define layouts de tela em SwiftUI e, no tempo de execução, chama uma classe de modelo associada para os dados que preenchem suas interfaces. No projeto de modelo do Swift do Mobile SDK, as classes de modelo estão na pasta de projeto Modelos. Por exemplo, o arquivo ContactsForAccountModel.swift define o código que solicita uma lista de contatos para uma conta. Quando a resposta chega, a classe ContactsForAccountModel
processa os registros retornados para enviar uma lista de informações de contatos para a classe ContactsForAccountListView
.
RestClient
é seu ponto de entrada para todos os serviços REST. Os aplicativos Mobile SDK usam métodos RestClient para criar e enviar solicitações REST. Você acessa essa classe sempre por meio de sua instância compartilhada:
RestClient.shared()
fetchContactsForAccount(_:)
.- Crie e inicialize uma instância
RestRequest
.RestClient
fornece vários métodos de fábrica para essa finalidade. Nosso exemplo cria uma solicitação de consulta SOQL, mas você pode escolher qualquer métodoRestClient
adequado à finalidade pretendida. - Envie o objeto de solicitação para o Salesforce.
RestClient
autentica a solicitação automaticamente com as credenciais do usuário atual.
- No Xcode, abra o arquivo ContactsForAccountModel.swift.
- Procure o método
fetchContactsForAccount(_:)
. A implantação é exibida da seguinte forma: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
. Você pode ver essa chamada na instrução longa que começa com: let request = RestClient.shared.request(forQuery:...
RestRequest
contém uma solicitação REST previamente formatada com base na sequência SOQL dada.RestClient
. Quando você chama esse editor, na verdade você simplesmente diz, "aqui está minha solicitação". Em seguida, o editor trata da chamada de rede para enviar sua solicitação ao Salesforce e classifica a resposta da rede antes de entregá-la de volta ao código de espera.Você pode ver a chamada do editor na linha que inicia:
contactsCancellable = RestClient.shared.publisher(for: request)
Você pode reconhecer a sequência de chamadas que se segue como uma cadeia de chamadas, que é uma construção comum e útil para editores do Swift Combine. Essa cadeia de chamadas trata da resposta assíncrona da rede como um objeto Future
que eventualmente termina ou falha. Em cada uma das cadeias de chamadas, a ação é realizada no objeto padrão atual. Esse objeto pode ser redefinido pelo valor de retorno da chamada anterior na cadeia. Se a chamada de rede falhar ou o Salesforce retornar um erro, o processamento cairá para o bloco .catch
.
Para ter uma noção detalhada de como a cadeia de chamadas funciona, veja a seguir uma lista muito bem comentada da sequência.
// 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) }
Outras opções
Se você examinar outras classes de modelo no aplicativo de modelo, poderá ver que RestClient.shared.publisher
não é o único meio de obter dados do Salesforce. Por exemplo, AccountsListModel
usa dois outros editores:
- Um editor SmartStore
- Um editor de Sincronização móvel
É provável que você ainda não conheça SmartStore e Sincronização móvel, mas, simplificando, eles são os dois recursos offline do Mobile SDK. SmartStore é uma configuração de armazenamento local que serve como um repositório offline para registros do Salesforce. Como este repositório criptografado reside no dispositivo móvel, o recurso SmartStore permite que o cliente continue trabalhando mesmo se a conectividade de rede falhar. Enquanto isso, a Sincronização móvel faz o trabalho pesado de:
- Obter registros do Salesforce
- Armazenar registros em soups do SmartStore (semelhante às tabelas de banco de dados)
- Garantir que os registros do SmartStore e registros do servidor permaneçam em sincronia quando o cliente baixar novos registros ou carregar alterações locais
O Mobile SDK define esses editores em extensões da classe Swift. Se você estiver curioso para ver como a magia acontece, no Xcode, clique com o botão direito do mouse em qualquer uma das vars publisher
e selecione Ir para definição. Nos dois casos, o código é simples. Ele difere dos métodos SmartStore ou Sincronização móvel da funcionalidade real. Para saber mais sobre esses editores, suas tecnologias subjacentes e outros meios de codificar interações da API REST, siga os links de Recursos. É bem provável que você fique satisfeito em usar os editores elegantes e eficientes!
Recursos
- Guia do desenvolvedor: Modelo Swift nativo
- Guia do desenvolvedor: Como tratar solicitações REST
- Guia do desenvolvedor: Como tratar respostas REST
- Guia do desenvolvedor: Como usar métodos SFRestRequest
- Guia do desenvolvedor: Operações suportadas
- Guia do desenvolvedor: Guia do desenvolvedor da API REST
- Trailhead: Noções básicas da API
- Link externo: Centro de aprendizagem do Postman