A função getRest
foi desenvolvida para realizar requisições HTTP via REST no sistema Protheus, ou em qualquer outro sistema configurável. Utilizando a biblioteca cURL do PHP, ela é flexível o suficiente para autenticar requisições, lidar com parâmetros opcionais e monitorar o tempo de resposta. Abaixo, vamos explorar o funcionamento e propósito de cada parte dessa função.
Descrição Geral da Função
A função getRest
permite fazer chamadas para URLs REST, retornando o resultado em JSON. É especialmente útil para buscar dados ou executar ações em APIs RESTful, como as expostas pelo sistema Protheus, podendo autenticar e personalizar a requisição conforme necessário.
Estrutura e Parâmetros da Função
A função possui três parâmetros principais:
$url
: URL da API REST a ser acessada.$protheus
: Booleano que indica se a requisição é para o sistema Protheus, onde são necessárias configurações específicas de autenticação e cabeçalho.$options
: Array opcional para configurações adicionais de cabeçalho e outras opções, como a possibilidade de retornar o código HTTP da resposta.
Passo a Passo da Função
- Início do Cronômetro: A variável
$inicio
registra o tempo de início da execução da função, permitindo calcular o tempo total ao final. - Configuração do cURL: A função inicializa a instância cURL e define algumas opções básicas:
- CURLOPT_RETURNTRANSFER: Retorna o resultado da requisição em vez de imprimi-lo.
- CURLOPT_URL: Define a URL da requisição.
- CURLOPT_USERAGENT: Define um agente de usuário para a requisição.
- Cabeçalhos para Protheus:
- Se a variável
$protheus
for verdadeira, a função configura cabeçalhos específicos para acessar a API do Protheus. - Um cabeçalho
tenantId
é adicionado, com o código da empresa configurado emEMPCOD
. - Se a variável
REST_AUTH
estiver ativa, é adicionada uma autenticação básica com as credenciais (REST_USER
eREST_PASS
) codificadas em Base64.
- Se a variável
- Cabeçalhos Opcionais:
- Para personalizar a requisição, a função itera sobre o array
$options
e adiciona cada par chave-valor como um cabeçalho HTTP.
- Para personalizar a requisição, a função itera sobre o array
- Execução da Requisição:
- A função executa a requisição e armazena a resposta em JSON na variável
$json_results
. - Ela também verifica se o código HTTP de resposta é necessário (
$options['status_code']
). Se sim, armazena o código na variável$http_code
.
- A função executa a requisição e armazena a resposta em JSON na variável
- Tratamento da Resposta:
- Após receber a resposta, a função converte seu encoding para UTF-8 para evitar problemas de caracteres.
- Se a resposta for um JSON vazio (
[{}]
), ela é redefinida para uma string vazia.
- Cálculo do Tempo de Resposta:
- A função calcula a duração da requisição subtraindo o tempo final (
$fim
) do tempo inicial ($inicio
), guardando esse tempo em segundos.
- A função calcula a duração da requisição subtraindo o tempo final (
- Registro de Logs e Sessão:
- Logs de Sessão: A função registra a URL e o tempo da requisição em uma sessão (
REQUESTQUERIES
). - Logs de Arquivo: Se o
LOGFILE
estiver ativado, a função registra o tempo da requisição e o status da resposta em um arquivo de log.
- Logs de Sessão: A função registra a URL e o tempo da requisição em uma sessão (
- Retorno da Função:
- A função retorna o JSON de resposta. Se
$options['status_code']
estiver ativo, retorna um array contendo o código HTTP e o JSON da resposta.
- A função retorna o JSON de resposta. Se
Exemplo de Uso
Essa função é essencial para integrar sistemas que dependem de dados do Protheus ou outras APIs REST. Abaixo está um exemplo de como utilizá-la para buscar dados:
Conclusão
A função getRest
é uma ferramenta poderosa para acessar APIs REST, oferecendo autenticação opcional, personalização de cabeçalhos, controle de tempo de resposta e registro em log. Ela é altamente customizável, permitindo o uso tanto para chamadas simples quanto para integrações robustas com o sistema Protheus, simplificando o processo de comunicação entre sistemas e melhorando a eficiência na troca de dados.
Fernando Bueno
Atuando desde 2005 no mercado de tecnologia, desenvolvendo e implantando e sistemas gerenciais, sistemas e sites web e ecommerce.
Siga-me no Linked In