Criando REST públicas no Salesforce

Dando continuidade ao post sobre o uso de REST, hoje vou te mostrar como você pode criar uma REST pública no Salesforce.

Se você não leu o Post Mergulhando fundo na utilização de REST API do Salesforce, sugiro que antes de continuarmos você dê uma pausa na leitura desse post e vá até lá, assim, com certeza este post fará mais sentido para você.

O que é uma REST pública

Basicamente uma REST pública, é uma REST que não requer nenhuma autenticação, e qualquer um poderá consumi-la. Isso é muito legal, pois permite você expor um serviço para que outros possam utilizar, sem muita frescura, simplesmente fazendo uma requisição para a URL da sua API.

A solução out of the box (fora da caixa)

Custei para chegar nessa solução, e chamo ela de out of the box, porque não existe em nenhuma documentação do Salesforce como realizar essa ação, e por isso achei que ela merecia um Post, não é mesmo?

Mão na massa

Bom, chega de teoria, vamos direto ao que interessa….

Sim, vamos, o primeiro passo é você criar um Site Force.com, se é que você já não tem um na sua ORG. Mas mesmo se tiver, sugiro que você crie um novo, assim ficará mais fácil para customizar as permissões e também ter uma URL nova só para a sua API.

Criando um site force.com

Para criar um novo site, acesse o menu de configurações.

Em seguida procure Site no menu lateral esquerdo.

Agora clique no botão Novo, e preencha o cadastro do seu novo site force.com

Guarde o seu Endereço da web padrão + o nome que vc inseriu, pois esta será parte da URL que iremos acessar mais a frente, para ver o resultado final.

Criando a REST pública

Agora precisamos criar a nossa REST, se você lembra do Post anterior, lá criamos uma REST para listar todos os eventos, certo? Para simplificar este post, vamos utilizar a mesma classe, só que agora ela poderá ser chamada de forma pública, sem passar nenhum parâmetro ou realizar qualquer tipo de autenticação, neste nosso exemplo só vou mostrar o funcionamento de uma REST com o método GET, mas essa técnica irá funciona para todos os métodos disponíveis hoje: GET, POST, PUT, DELETE.

@RestResource(urlMapping='/Eventos')
global class ListEventoREST {
    @HttpGet
    global static List<Evento__c> getEventos() {
        return [SELECT Id,
                Name,
                Inicio__c,
                Fim__c
                FROM Evento__c
                WHERE Fim__c >= TODAY];
    }
}

Configurando a permissão de acesso a classe do Apex

Uma vez que sua classe esteja criada, agora temos que acessar as configurações do nosso novo site force.com e realizar a permissão de acesso a essa classe, para isso vamos novamente nas configurações \ Sites.

Vamos então clicar no nome do site criado e em seguida clicar em Configurações de acesso publico.

Procure pela lista relacionada Acesso à classe de código do Apex ativado e clique no botão Editar.

Encontre a classe que deseja compartilhar, no nosso caso a classe ListEventoREST e clique no botão Salvar.

Testando sua REST

Para testar é muito simples, como estamos utilizando uma REST GET, podemos simplesmente chamar a URL no navegador, que então será exibido o resultado da REST.

Neste caso a URL é montada da seguinte forma.

URL do seu site force.com + /services/apexrest/ + nome da sua REST, aquele que definimos na primeira linha da nossa classe REST: @RestResource(urlMapping=’/Eventos‘)

No nosso caso a URL ficará assim: services/apexrest/Eventos

Que cuidados devo tomar ao usar uma REST pública?

Um ponto muito importante é tomar cuidado se a sua REST pública for inserir, atualizar ou remover dados do seu Salesforce, pois como ela é pública você não terá nenhum rastreio de quem fez tal ação, e algum espertinho pode criar um robozinho para consumir a sua REST.

Outro ponto a se observar é o consumo da API, assim como outras funcionalidades do Salesforce a REST também consome uso da API e se você estourar o limite de uso, seu serviço irá parar de funcionar, o limite depende do tipo da sua ORG e o tamanho dela, e você pode consultar o consumo da API as configurações, e procure por Visão Geral do Sistema no menu esquerdo.

Procure pelo box abaixo:

Conclusão

Apesar de ser uma solução out of the box, eu já utilizo ela em alguns projetos já tem um bom tempo, como disse antes, foi um caminho longo até encontrar essa solução, e me abriu a mente para um universo infinito de possibilidades, muitas vezes só precisamos expor um dado ou uma gama de dados para um fornecedor e não queremos ter que criar toda uma rotina de autenticação, criação de um Aplicativo no Salesforce, para simplesmente expor alguns registros, então espero que esse post te ajude a pensar também fora da caixa e encontrar inúmeras utilidades para ele.

Um forte abraço e até o próximo post :)

 

Fernando Sousa

Senior Salesforce Developer

Bacharel em Sistemas da Informação pela Universidade de Taubaté (UNITAU) e MBA em Projeto de Aplicações para Dispositivos Móveis pelo IGTI – Instituto de Gestão em Tecnologia da Informação. 

Comecei a programar bem cedo, por volta de 10 anos de idade, de maneira auto-didata passei por várias linguagens.

Em 2015 me conectei a plataforma Salesforce pela primeira vez, para fazer una integração entre um Aplicativos Mobile em android e o Salesforce Platform. 

Atualmente com as certificações Salesforce Certified Platform Developer I, Salesforce Certified Platform App BuilderSalesforce Certified Platform Developer IISalesforce Administrator e Sharing and Visibility.

Acompanhe meu Trailhead aqui.

 

DeveloperRESTREST APISalesforceSalesforce Developer