Artigo
· Fev. 12 5min de leitura

Utilizando API REST, Flask e IAM com o InterSystems IRIS - Parte 3 – IAM

Utilizando Flask, API REST e IAM com o InterSystems IRIS

Parte 3 – IAM

 

O InterSystems API Manager (IAM) é um componente que permite monitorar, controlar e gerir o tráfego de APIs baseadas em HTTP. Ele também atua como uma API gateway entre aplicações e servidores InterSystems IRIS. 

 

O documento publicado em https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_apimgr traz as informações sobre o produto.

 

Já o documento https://docs.intersystems.com/components/csp/docbook/DocBook.UI.Page.cls?KEY=CIAM3.0_install traz todas as informações para a instalação e configuração do IAM.

 

Após instalar o IAM vamos ativar o mesmo e configurar um serviço, rota e plugin para criar um Rate Limiting para a nossa API REST.

 

Primeiro, após instalar o IAM vamos ativa-lo conforme definido na documentação:

 

 

Uma vez ativado o IAM vamos abrir a interface de administração para criar o serviço, rota e plugin necessários. Para isso no navegador acessamos o servidor na porta 8002:

 

 

Nesta tela vemos as opções de manutenção de serviço, rota e plugins, que são as tarefas que vamos realizar. Primeiro vamos criar o serviço para atender a nossa API REST. Clique no menu lateral em Services e na sequencia em New Service:

 

 

Informe o nome (cliente-service) e na opção Add using URL informe em URL o caminho da API (http://192.168.0.13/iris/rest/servico/cliente nonosso exemplo). Clique em Create e o serviço estará criado:

 

 

Agora vamos criar a rota. No menu lateral clique em Routes e a seguir em New Route.

 

 

 

Selecione o serviço que criamos, informe um nome para a rota (cliente-route por exemplo), informe os protocolos que poderão ser usados (http e https), informe o host (192.168.0.13) e os métodos (GET,PUT,POST,DELETE). Clique no link Add Path e informe o path para esta rota (/api/cliente). Clique em Create e a rota estará criada:

 

 

 

 

 

 

 

Agora vamos criar o plugin de rate Limiting. Este plugin limita o número de solicitações que um usuário pode fazer em um determinado período de tempo. Para isso volte ao menu lateral e clique em Plugins e na sequencia em New Plugin. Na caixa de pesquisa digite Rate e veja os plugins listados:

 

 

 

Selecione o plugin Rate Limiting Advanced. Será a presentada a tela de configuração do plugin:

 

 

 

 

Na tela de configuração mude a opção para Scoped. Selecione o serviço que criamos. Informe a quantidade de acessos em Config.Limit (5 por exemplo) e o tempo de intervalo em Config.Window.Size (60 por exemplo). Mude Config.Strategy para local e clique em Create. Pronto. Nosso plugin está criado e já está trabalhando:

 

 

 

Agora vamos precisar fazer uma alteração no nosso código python para consumir a nossa API através do IAM. Para isso vamos mudar o endereço da URL da API para o endereço que criamos na Rota do IAM:

 

API_URL = “http://192.168.0.13/iris/rest/servico/cliente” - Código Original

 

API_URL = “http://192.168.0.13:8000/api/cliente“ - Nova URL passando pelo IAM

Reative o servidor do Flask e volte a página da aplicação. Desta vez dê uma sequencia de refresh (F5) de forma a chamar a  API diversas vezes. Veja que na 6ª  chamada da API temos uma falha:

 

 

A nossa aplicação não está preparada para tratar a falha no HTTP status. Vamos fazer alguns ajustes. Primeiro vamos criar na pasta templates uma página de erro chamada erro.html:

 

<!DOCTYPE html>

<html lang="pt-br">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Erro</title>

</head>

<body>

    <h1>Ocorreu um erro!</h1>

    <p>Código de erro: {{ status_code }}</p>

    <p>Mensagem de erro: {{ error_message }}</p>

</body>

</html>

 

Vamos voltar ao código em python e fazer um ajuste para capturar o erro. No trecho que chamaos a montagem da página de index vamos tratar um HTTP code diferente de 200:

 

Onde temos o seguinte código no rota “/”:

 

    data = response.json()

    lista = data["clientes"]

    return render_template("index.html", registros=lista)

 

Mudamos para:

 

  if response.status_code == 200:

        data = response.json()

        lista = data["clientes"]

        return render_template("index.html", registros=lista)

  else:

        return render_template('erro.html', status_code=response.status_code, error_message=response.json().get('message', 'Erro desconhecido'))

 

Vamos reiniciar a aplicação Flask e mais uma vez vamos chamar a API diversas vezes. Desta vez vamos receber uma tela de erro tratado:

 

 

 

Podemos então ver que o IAM já está trabalhando, recebendo as requisições e aplicando os plugins configurados. De acordo com nossa configuração o IAM restringiu o acesso a API devolvendo um HTTP status 429 conforme configurado no plugin.

 

Voltando a tela de administração no IAM podemos ver já algumas informações sobre o consumo do serviço:

 

 

Podemos ver a quantidade de requisições que foram feitas ao serviço por HTTP Status por exemplo. Podemos também mudar a forma de visualização do gráfico:

 

 

O IAM é uma ferramenta poderosa que agrega diversas vantagens ao Iris e permite uma série de ações com seus plugins. O IAM pode ser um aliado poderoso para a publicação de serviços.

 

Até a próxima!

Discussão (0)1
Entre ou crie uma conta para continuar