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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
public function getRest($url, $protheus = true, $options = []) { $inicio = microtime(true); // Get cURL resource $curl = curl_init(); // Set some options - we are passing in a useragent too here curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $url, CURLOPT_USERAGENT => 'Codular Sample cURL Request' ]); if ($protheus) { //EXIT(REST_USER . ':' . REST_PASS); curl_setopt($curl, CURLOPT_HTTPHEADER, ['tenantId: ' . EMPCOD]); if (REST_AUTH) { curl_setopt($curl, CURLOPT_HTTPHEADER, ['Authorization: BASIC ' . base64_encode(REST_USER . ':' . REST_PASS)]); } } if (count($options) > 0) { foreach ($options as $index_opt => $option) { curl_setopt($curl, CURLOPT_HTTPHEADER, [$index_opt . ': ' . $option]); } } // Send the request & save response to $resp //exit($url); $json_results = curl_exec($curl); if (isset($options['status_code']) && $options['status_code']) { $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); } $http_code = curl_getinfo($curl, CURLINFO_HTTP_CODE); // Close request to clear up some resources curl_close($curl); //exit($json_results); if ($json_results == '[{}]') { $json_results = ''; } //$json_results = utf8_encode($json_results); $json_results = mb_convert_encoding($json_results, 'UTF-8', 'auto'); $fim = microtime(true); $diferencaSegundos = $fim - $inicio; $session = new Session(); $_data_session['REQUESTQUERIES'][] = "[REST]<br/>" . $url . "<br/ > ----- Tempo em segundos: " . $diferencaSegundos; $session->updateData($_data_session, 'REQUESTQUERIES'); if (LOGFILE == 'ON') { $tempo = ' [' . $diferencaSegundos . ' segundos] '; error_log('[getRest][' . date("d/m/Y H:i:s") . ']:[status:'. $http_code .']' . $url . $tempo . PHP_EOL, 3, ROOT . '/log/' . LOGFILENAME); } if (isset($options['status_code']) && $options['status_code']) { return [$http_code, $json_results]; } else { return $json_results; } } |
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:
1 2 3 4 5 6 7 |
$url = "https://api.protheus.com/data"; $response = getRest($url, true, ['status_code' => true]); // Exibe o código HTTP e a resposta JSON list($http_code, $json_data) = $response; echo "Status HTTP: " . $http_code; echo "Dados JSON: " . $json_data; |
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
Últimos posts por Fernando Bueno (exibir todos)
- Indicadores Logísticos para Gestão de Transportadoras - 4 de dezembro de 2024
- O Papel Estratégico do Setor Logístico na Cadeia de Suprimentos - 20 de novembro de 2024
- Logística Reversa: Estratégia Sustentável e Lucrativa para Empresas - 20 de novembro de 2024