Pular para o conteúdo

Aprenda a acessar uma API via PL/SQL no Oracle 19c

Como acessar uma API via PL/SQL no Oracle 19c

Uma API (Application Programming Interface) é um conjunto de regras e funcionalidades que possibilita que diferentes softwares se comuniquem e interajam entre si de maneira padronizada. Com o uso de APIs, os desenvolvedores são capazes de criar aplicativos que se integram facilmente com outros sistemas, compartilham dados e oferecem serviços para outros aplicativos.

Neste artigo, vamos aprender como acessar uma API via PL/SQL no Oracle 19c. O PL/SQL é uma linguagem de programação procedural que permite executar blocos de código dentro do banco de dados, manipulando dados e realizando operações lógicas.

Para acessar uma API via PL/SQL, precisamos usar o pacote UTL_HTTP, que fornece funções e procedimentos para realizar requisições HTTP e obter respostas. O pacote UTL_HTTP faz parte da biblioteca padrão do PL/SQL e está disponível em todas as versões do Oracle Database.

Exemplo prático

Vamos supor que queremos acessar uma API que retorna o preço atual do Bitcoin em reais. A API que vamos usar é a seguinte: https://economia.awesomeapi.com.br/json/all/BTC-BRL

Para acessar essa API via PL/SQL, podemos seguir os seguintes passos:

  • Criar uma variável do tipo UTL_HTTP.REQ para armazenar a requisição HTTP.
  • Criar uma variável do tipo UTL_HTTP.RESP para armazenar a resposta HTTP.
  • Criar uma variável do tipo VARCHAR2 para armazenar o conteúdo da resposta.
  • Iniciar a requisição HTTP usando a função UTL_HTTP.BEGIN_REQUEST, passando a URL da API e o método GET como parâmetros.
  • Obter a resposta HTTP usando a função UTL_HTTP.GET_RESPONSE, passando a variável da requisição como parâmetro.
  • Ler o conteúdo da resposta usando um loop e a função UTL_HTTP.READ_TEXT, passando a variável da resposta e a variável do conteúdo como parâmetros.
  • Finalizar a resposta HTTP usando o procedimento UTL_HTTP.END_RESPONSE, passando a variável da resposta como parâmetro.
  • Exibir o conteúdo da resposta usando o procedimento DBMS_OUTPUT.PUT_LINE, passando a variável do conteúdo como parâmetro.

O código PL/SQL ficaria assim:

declare
  v_req utl_http.req; -- variável da requisição
  v_res utl_http.resp; -- variável da resposta
  v_content varchar2(4000); -- variável do conteúdo
begin
  -- iniciar a requisição HTTP
  v_req := utl_http.begin_request('https://economia.awesomeapi.com.br/json/all/BTC-BRL', 'GET');
  
  -- obter a resposta HTTP
  v_res := utl_http.get_response(v_req);
  
  -- ler o conteúdo da resposta
  begin
    loop
      utl_http.read_text(v_res, v_content);
      -- exibir o conteúdo da resposta
      dbms_output.put_line(v_content);
    end loop;
    -- finalizar a resposta HTTP
    utl_http.end_response(v_res);
  exception
    when utl_http.end_of_body then
      utl_http.end_response(v_res);
  end;
end;

Ao executar esse código, obteremos uma saída semelhante a esta:

{"BTC":{"code":"BTC","codein":"BRL","name":"Bitcoin","high":"243000","low":"233000","varBid":"-10000","pctChange":"-4.1","bid":"233000","ask":"233000","timestamp":"1628174400","create_date":"2021-08-05 17:00:00"}}

Essa saída é um objeto JSON que contém as informações sobre o preço do Bitcoin em reais. Podemos usar funções JSON do Oracle Database para extrair os valores desejados desse objeto.

Por exemplo, se quisermos obter apenas o valor de compra (bid) do Bitcoin, podemos usar a função JSON_VALUE, passando o conteúdo da resposta e o caminho do atributo como parâmetros. O código ficaria assim:

declare
  v_req utl_http.req; -- variável da requisição
  v_res utl_http.resp; -- variável da resposta
  v_content varchar2(4000); -- variável do conteúdo
  v_bid number; -- variável do valor de compra
begin
  -- iniciar a requisição HTTP
  v_req := utl_http.begin_request('https://economia.awesomeapi.com.br/json/all/BTC-BRL', 'GET');
  
  -- obter a resposta HTTP
  v_res := utl_http.get_response(v_req);
  
  -- ler o conteúdo da resposta
  begin
    loop
      utl_http.read_text(v_res, v_content);
    end loop;
    -- finalizar a resposta HTTP
    utl_http.end_response(v_res);
  exception
    when utl_http.end_of_body then
      utl_http.end_response(v_res);
  end;
  
  -- extrair o valor de compra do Bitcoin
  v_bid := json_value(v_content, '$.BTC.bid');
  
  -- exibir o valor de compra do Bitcoin
  dbms_output.put_line('O valor de compra do Bitcoin é: ' || v_bid || ' reais');
end;

Ao executar esse código, obteremos uma saída semelhante a esta:

O valor de compra do Bitcoin é: 233000 reais

Considerações

Para acessar uma API via PL/SQL, é necessário ter permissão para abrir uma conexão TCP com o servidor da API. Isso pode ser feito usando o pacote DBMS_NETWORK_ACL_ADMIN, que permite criar e atribuir listas de controle de acesso (ACL) para os hosts e portas desejados.

Por exemplo, se quisermos permitir que o usuário SCOTT acesse a API do exemplo anterior, podemos usar o seguinte código:

begin
  -- criar uma ACL para acessar a API
  dbms_network_acl_admin.create_acl(
    acl => 'api_acl.xml',
    description => 'ACL para acessar a API do Bitcoin',
    principal => 'SCOTT',
    is_grant => true,
    privilege => 'connect',
    start_date => systimestamp,
    end_date => null
  );
  
  -- atribuir a ACL para o host e porta da API
  dbms_network_acl_admin.assign_acl(
    acl => 'api_acl.xml',
    host => 'economia.awesomeapi.com.br',
    lower_port => 443,
    upper_port => null
  );
  
  commit;
end;

Bônus: Como criar uma API em Python

Python é uma linguagem de programação de alto nível, dinâmica, interpretada e multiparadigma. Ela é amplamente usada para diversos fins, como desenvolvimento web, análise de dados, automação, inteligência artificial e muito mais.

Python também é uma ótima linguagem para criar APIs, pois oferece diversos frameworks e bibliotecas que facilitam e agilizam o processo de desenvolvimento. Alguns dos frameworks mais populares para criar APIs em Python são:

  • Flask: um framework leve e simples que permite criar aplicações web e APIs com poucas linhas de código. Ele é ideal para projetos pequenos e rápidos, mas também pode ser usado para projetos maiores com o uso de extensões.
  • Django: um framework completo e robusto que segue o padrão MVC (Model-View-Controller) e oferece diversas funcionalidades integradas, como autenticação, administração, ORM (Object-Relational Mapping) e muito mais. Ele é ideal para projetos complexos e escaláveis que exigem alta performance e segurança.
  • FastAPI: um framework moderno e rápido que segue o padrão ASGI (Asynchronous Server Gateway Interface) e oferece suporte a requisições assíncronas, validação de dados, documentação automática e muito mais. Ele é ideal para projetos que requerem alta performance e produtividade.

Exemplo prático

Vamos supor que queremos criar uma API simples em Python que retorna uma mensagem de boas-vindas com o nome do usuário. A API que vamos criar é a seguinte: http://localhost:5000/hello/<name>

Para criar essa API simples em Python, podemos seguir os seguintes passos:

  1. Escolher um framework, como Flask, Django ou FastAPI. Neste exemplo, usaremos o Flask devido à sua simplicidade e facilidade de uso.
  2. Instalar o Flask e criar um arquivo chamado app.py com o seguinte código:
# importar o Flask
from flask import Flask

# criar uma instância do Flask
app = Flask(__name__)

# definir uma rota para a API
@app.route('/hello/<name>')
def hello(name):
  # retornar uma mensagem de boas-vindas com o nome do usuário
  return f'Olá, {name}! Seja bem-vindo à API do Flask!'

# executar a aplicação
if __name__ == '__main__':
  app.run()
  1. Executar o arquivo app.py no terminal usando o comando:
python app.py
  1. Acessar a API no navegador usando a URL: [http://localhost:5000/hello/<name>], substituindo <name> pelo nome desejado. Por exemplo, se acessarmos a URL: [http://localhost:5000/hello/Giovano], obteremos a seguinte saída:
Olá, Giovano! Seja bem-vindo à API do Flask!

Considerações

Para criar uma API em Python, é necessário ter o Python instalado na máquina, bem como o framework escolhido. O Flask pode ser instalado usando o gerenciador de pacotes pip, com o comando:

pip install flask

O Flask é um framework que segue o princípio da convenção sobre configuração, ou seja, ele usa valores padrão para a maioria das opções, como a porta, o modo de depuração e o ambiente. No entanto, esses valores podem ser alterados conforme a necessidade, usando variáveis de ambiente ou parâmetros na função app.run().

Por exemplo, se quisermos mudar a porta da aplicação para 8080, podemos usar o parâmetro port na função app.run(), assim:

app.run(port=8080)

Ou podemos usar a variável de ambiente FLASK_RUN_PORT, assim:

export FLASK_RUN_PORT=8080

Para mais informações sobre o Flask e como criar APIs mais complexas e completas com ele, consulte a documentação oficial do framework.

Abs

Referências

Giovano Silva

Giovano Silva

Giovano Silva é um profissional com mais de 10 anos de experiência em tecnologias Oracle, com ênfase em PL/SQL. Ele adora escrever sobre soluções para problemas comuns enfrentados por profissionais Oracle em seu dia a dia. Seu objetivo é compartilhar conhecimento, simplificar conceitos complexos e ajudar a comunidade Oracle a crescer coletivamente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress