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

Victor Shinya
5 min readMay 20, 2020

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"
}
Insira um CEP qualquer, como o 04007–900, por exemplo

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.

Execução do código acima

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.

Habilitar a opção “Enable as Web Action” — Habilite como Web Action

Salve a modificação no botão Save no canto superior direito.

Salve a alteração — necessário para qualquer alteração nesta página

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.

Teste da API em um POSTMAN

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.

--

--

Victor Shinya

Enterprise Solutions Architect @AWS | Previously @IBMCloud @IBMDeveloper 🇧🇷