Serverless com IBM Cloud Functions: como expor a sua função em uma API
Crie uma API a partir da função com Web Action
Esta é a parte 2 do Guia prático de Serverless. Acesse a parte 1 onde eu explico como funciona a arquitetura Serverless.
A arquitetura Serverless traz inúmeros benefícios para o time de projeto, especialmente para os desenvolvedores. Facilmente você consegue desacoplar algumas funções de uma aplicação, como ações de backup de banco de dados ou processamento de dados ou arquivos recém inseridos em um Storage. Dessa forma você consegue trabalhar com diversos microserviços e até aproveitar para automatizar determinados processos, como no caso de um cron para criar backups do banco de dados.
É possível desenvolver e executar uma tarefa simples com essa arquitetura, como a criação de uma API para realizar o processamento de linguagem natural com o serviço de Natural Language Understanding ou Watson Assistant, por exemplo, e depois armazenar os resultados em um banco de dados, em um MongoDB ou IBM Cloudant.
Expor a Action como uma Web Action
Aqui você vai aprender a criar uma API, de forma rápida, a partir da sua Action, com o chamado Web Action — caso você ainda não tenha aprendido a criar uma Action (também conhecido como Function), veja o primeiro blog post de como funciona esse tal “Serverless”.
Uma Web Action é uma Action com a capacidade de ser chamada por uma URL, sem a necessidade de uma chave de API.
Um caso de uso convencional é de um chatbot dinâmico. Um chatbot dinâmico precisa acessar serviços externos e utiliza da funcionalidade de chamada de API, como o Webhooks do Watson Assistant, para solicitar mais dados de um determinado serviço seja um banco de dados ou um webservice. Então imagine um bot que necessita de mais dados a partir do CEP, informado pelo usuário. Você vai precisar de uma API do tipo POST para integrar. Nesse caso, você criará uma Action que chamará o webservice do ViaCEP, que por sua vez irá buscar todos os dados necessários.
Criar nova Action
Basta criar uma nova Action no IBM Cloud Functions com o código abaixo:
const rp = require('request-promise');function main(params) {
if (!params.cep) {
return { message: 'Nenhum CEP encontrado.' };
}
return rp({
method: 'GET',
uri: `https://viacep.com.br/ws/${params.cep}/json/`,
json: true
})
.then(body => {
return body;
})
.catch(err => {
return err;
});
}
Após criar a Action, com o código acima, faça um teste com um CEP qualquer. Caso não tenha um em mente, utilize o CEP da IBM Brasil, 04007–900. Insira o JSON abaixo dentro da aba de parâmetro de entrada.
{
"cep": "04007-900"
}
Salve e execute o teste para ver o resultado. Você verá que o webservice retorna diversos campos, como Rua (Logradouro), Cidade e Estado.
Habilitar a Web Action
Agora clique na opção Endpoints na aba lateral esquerda. Nesta página, você tem algumas configurações disponíveis para expor a sua Action.
Basta habilitar a opção “Enable as Web Action” para ter acesso a URL, que será usada para chamar a Action, por meio da API.
Salve a modificação no botão Save no canto superior direito.
Depois de salvar, você terá acesso a URL, que pode ser acessada por uma requisição de qualquer método HTTP (GET, POST, DELETE, PUT, PATCH, HEAD e OPTIONS).
Com a URL em mãos, basta apenas utilizar. Sempre que executar a API da sua Web Action, adicione o sufixo .json no final da URL. Veja o exemplo abaixo:
# URL da Web Actionhttps://us-south.functions.cloud.ibm.com/api/v1/web/vshinya%40br.ibm.com_dev/default/get-address# API que você usar nas requisições HTTPhttps://us-south.functions.cloud.ibm.com/api/v1/web/vshinya%40br.ibm.com_dev/default/get-address.json
Agora que você já tem a API exposta, faça um teste em uma aplicação, no terminal ou mesmo em um Postman.
Terminal
Abra o Terminal e execute o comando abaixo:
curl -X POST 'https://us-south.functions.cloud.ibm.com/api/v1/web/vshinya%40br.ibm.com_dev/default/get-address.json' -H 'Content-Type: application/json' -d '{"cep":"04007-900"}'
Postman
Você também pode executar em um Postman. Basta baixar a aplicação e configurar um novo Request com os dados da sua API.
Você terá o mesmo resultado em ambas as formas. Veja que o resultado também é idêntico.
Próximos passos
No próximo post, você irá aprender a expor essa função em uma API usando API Connect, um serviço de gerenciamento de APIs para IBM Cloud Functions, Cloud Foundry e fluxos no App Connect. Assim você adicionará uma camada de controle entre a API e a Action. Uma forma simples de controlar volume de chamadas e adicionar mais segurança na sua API.
Referências
- Creating web actions: https://cloud.ibm.com/docs/openwhisk?topic=cloud-functions-actions_web
- How Cloud Functions works: https://cloud.ibm.com/docs/openwhisk?topic=cloud-functions-about
Siga nas redes sociais e…
até a próxima!