Skip to main content

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()

Veja a sequência de “enviar solicitação” padrão demonstrada no método fetchContactsForAccount(_:).
  1. 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étodo RestClient adequado à finalidade pretendida.
  2. Envie o objeto de solicitação para o Salesforce. RestClient autentica a solicitação automaticamente com as credenciais do usuário atual.
Vamos examinar o código.
  1. No Xcode, abra o arquivo ContactsForAccountModel.swift.
  2. 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)
            }
        }
    }
Este método cria uma solicitação REST, envia-a ao Salesforce e processa a resposta. Para criar o objeto de solicitação, ele usa a instância compartilhada RestClient. Você pode ver essa chamada na instrução longa que começa com: 
let request = RestClient.shared.request(forQuery:... 
O objeto resultante RestRequest contém uma solicitação REST previamente formatada com base na sequência SOQL dada.

Como a solicitação é enviada e a resposta recebida, é um pouco menos óbvio. Este exemplo simplifica as duas etapas usando um editor do Mobile SDK Swift Combine, especificamente, o editor 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!

Continue a aprender de graça!
Inscreva-se em uma conta para continuar.
O que você ganha com isso?
  • Receba recomendações personalizadas para suas metas de carreira
  • Pratique suas habilidades com desafios práticos e testes
  • Monitore e compartilhe seu progresso com os empregadores
  • Conecte-se a orientação e oportunidades de carreira