Comunicar com API é um processo muito simples, pois com apenas 03 parâmetros você realiza a comunicação. Criamos um exemplo prático com linguagem php para ilustrar essa comunicação.
Você precisa trocar informações com uma API e não sabe exatamente como estruturar esta comunicação? No artigo de hoje, você vai aprender sobre como comunicar com API, através de um método geral de comunicação, utilizando requisições do tipo HTTP POST e HTTP GET. A linguagem de desenvolvimento utilizada em nosso exemplo é o PHP. Confira a seguir!
<?php
class Comunicacao {
public function enviaConteudoParaAPI($cabecalho = array(), $conteudoAEnviar, $url, $tpRequisicao) {
try{
//Inicializa cURL para uma URL.
$ch = curl_init($url);
//Marca que vai enviar por POST(1=SIM), caso tpRequisicao seja igual a "POST"
if ($tpRequisicao == 'POST') {
curl_setopt($ch, CURLOPT_POST, 1);
//Passa o conteúdo para o campo de envio por POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $conteudoAEnviar);
}
//Se foi passado como parâmetro, adiciona o cabeçalho à requisição
if (!empty($cabecalho)) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $cabecalho);
}
//Marca que vai receber string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
/*
Caso você não receba retorno da API, pode estar com problema de SSL.
Remova o comentário da linha abaixo para desabilitar a verificação.
*/
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//Inicia a conexão
$resposta = curl_exec($ch);
//Fecha a conexão
curl_close($ch);
}catch(Exception $e){
return $e->getMessage();
}
return $resposta;
}
}
?>
Introdução e estrutura da função
Para comunicar com API, de uma forma geral, você precisa fornecer sempre 3 informações para que a comunicação ocorra com sucesso: o conteúdo a ser enviado, a URL do serviço e o tipo de requisição (POST, GET, PUT ou DELETE). Além disso, você pode também colocar informações adicionais no cabeçalho (header) da requisição. Com base nesses parâmetros, criamos o método a seguir (dentro da classe comunicacao), que funciona como uma espécie de “meio-campo” entre a aplicação que fará o consumo do serviço e a API desejada:
Exemplo de utilização
Para exemplificar a utilização do método acima, vamos emitir uma NFCe através da NS NFCe API da NS Tecnologia. Para isso, criamos um pequeno arquivo .php para realizar o consumo da função enviaConteudoParaAPI, criada anteriormente e que irá comunicar com API. confira o arquivo a seguir:
<html>
<head>
<title>Método Geral Comunicação API - GET e POST</title>
</head>
<body>
<?php
//Faz o include da classe Comunicacao
include 'comunicacao.php';
//Cria um novo objeto da classe
$Comunicacao = new Comunicacao;
//Define os dados de cabeçalho da requisição
$cabecalho = array(
'Content-Type: application/json',
'X-AUTH-TOKEN: @@@@@@@@@@@@@@@@@@@'
);
//Configura o conteúdo a ser enviado
$conteudo = '{"NFe": { "infNFe":{ "versao":"3.10", "ide":{ "cUF":"43", "natOp":"VENDA", "indPag":"0", "mod":"65", "serie":"0", "nNF":"8636", "dhEmi":"2018-03-01T15:29:09-03:00", "tpNF":"1", "idDest":"1", "cMunFG":"4303509", "tpImp":"4", "tpEmis":"1", "tpAmb":"2", "finNFe":"1", "indFinal":"1", "indPres":"1", "procEmi":"0", "verProc":"1.0.0.0" }, "emit":{ "CNPJ":"07364617000135", "xNome":"NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL", "enderEmit":{ "xLgr":"AV ANTONIO DURO", "nro":"100", "xBairro":"CENTRO", "cMun":"4303509", "xMun":"CAMAQUA", "UF":"RS", "CEP":"96180000", "cPais":"1058", "xPais":"BRASIL" }, "IE":"0170108708", "CRT":"3" }, "det":[ { "nItem":1, "prod":{ "cProd":"2", "cEAN":"7897348203810", "xProd":"NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL", "NCM":"30023010", "CFOP":"5102", "uCom":"UN", "qCom":"1", "vUnCom":"132.00", "vProd":"132.00", "cEANTrib":"7897348203810", "uTrib":"UN", "qTrib":"1", "vUnTrib":"132.00", "indTot":"1" }, "imposto":{ "ICMS":{ "ICMS00":{ "orig":"0", "CST":"00", "modBC":"3", "vBC":"132.00", "pICMS":"18.00", "vICMS":"23.76" } }, "PIS":{ "PISAliq":{ "CST":"01", "vBC":"132.00", "pPIS":"0.00", "vPIS":"0.00" } }, "COFINS":{ "COFINSAliq":{ "CST":"01", "vBC":"132.00", "pCOFINS":"0.00", "vCOFINS":"0.00" } } } } ], "total":{ "ICMSTot":{ "vBC":"132.00", "vICMS":"23.76", "vBCST":"0.00", "vST":"0.00", "vProd":"132.00", "vFrete":"0.00", "vSeg":"0.00", "vDesc":"0.00", "vII":"0.00", "vIPI":"0.00", "vPIS":"0.00", "vCOFINS":"0.00", "vOutro":"0.00", "vNF":"132.00", "vICMSDeson":"0.00" } }, "transp":{ "modFrete":"9" }, "pag":{ "tPag":"01", "vPag":"132.00" }, "infAdic":{ "infCpl":"NOTA FISCAL EMITIDA EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL" } } }}';
//Define a URL para consumo do serviço
$url = 'https://nfce.ns.eti.br/v1/nfce/issue';
//Tipo de requisição: POST
$tpRequisicao = 'POST';
//Faz a chamada da função, passando os parâmetros
$resposta = $Comunicacao->enviaConteudoParaAPI($cabecalho, $conteudo, $url, $tpRequisicao);
//Exibe a resposta da API
echo $resposta;
?>
</body>
</html>
Confira a saída no browser:

Conclusão
Com a utilização do método acima, fizemos a emissão de uma NFCe através da API da NS Tecnologia. Com apenas 4 parâmetros (um deles, opcional), é possível consumir qualquer serviço API. Espero que este código tenha ajudado você a compreender um pouco mais sobre a comunicação com APIs em PHP. Qualquer dúvida, deixe seu comentário aqui abaixo, vai ser um prazer ajudá-lo
Gostou do Post? Caso você não conheça nossa API entre em contato conosco!

Muito bom o conteúdo. Teste na versão php 7.1.20 e funcionou perfeitamente.
Tenho duas sugestões para futuros posts, o primeiro sobre o código, se você chamou a classe Comunicacao no HTML, mas não colocou no include. A outra é para melhorar um pouco a parte comentada, a explicação em algumas linhas fica muito vaga.
Olá Rubens, tudo bem?
Ficamos muito felizes quando recebemos seu comentário, nós realmente amamos quando ajudamos alguém com nossos posts.
Referente às suas sugestões, se você observar o include da classe comunicação foi feito logo após a abertura da tag
Como o Rubens disse, nos exemplos acima não é mencionada a classe comunicação. ao testar aqui o código ficou incompleto. Mas seu post tem me ajudado bastante.
Olá Jhonatam.
Obrigado pelo seu comentário, ficamos mega felizes sempre que conseguimos auxiliar alguém.
Apenas para esclarecer, se você observar, na linha a seguir, é chamado o método enviaConteudoParaAPI, da classe Comunicacao:
$resposta = $Comunicaco->enviaConteudoParaAPI($cabecalho, $conteudo, $url, $tpRequisicao);
Nesse caso, o método enviaConteudoParaAPI que foi colocado no post está dentro da classe Comunicacao.
Muito obrigado pela sugestão, iremos adicionar uma informação destacando isto no post.
Um grande abraço!
Olá, muito bom este post… utilizei a explicação acima e deu certo, porém estou acessando um ambiente autenticado onde informo usar e pass e a url de autenticação me retorna um token, como faço agora pra navegar nas outras URLs do ambiente autenticado?
Olá Lucas, tudo bem?
Qual é o nome e o link desse ambiente autenticado a que você se refere?
Grande abraço!
Bom dia Leonardo, tudo bem? Poderia publicar algo, ou se auxiliar como tu fez o modo noturno da página, na opção ‘Alterar Alto Contraste’, preciso fazer com react, mas sabendo como tu fez aqui, já é uma boa base.
Obrigado meu amigo, ótimos conteúdos.
Olá Júnior, tudo bem?
Essa barra de acessibilidade foi inserida através do plugin Wp Accessibility para WordPress, que permite o alto contraste e também mudar o tamanho da fonte.
Espero ter ajudado.
Muito obrigado pelas palavras.
Grande abraço!
Api, hoje em dia representa o futuro dos sistemas!! Onde trabalho, estamos integrando via api sistemas atraves de api, é muito bacana essa “tecnologia” , facilita muito o trabalho em geral do desenvolvedor…
Não é tudo que faço com php, php eu uso para gerar as apis, normalmente a leitura das apis faço com jquery!!!
Gostei bastante do seu artigo!!!
Grande abraço!! até mais!!
Ganhou um seguidor para seu site!!
Obrigada Horacio por fazer parte dessa galera que ama tecnologia e está sempre em busca de evolução!
Grande Abraço e continue conosco!
Fabi Silva
Boa noite, eu gostei muito do seu material, tenho uma dúvida, pois muitos vezes eu só vejo as postagens de como é enviada os parametros pela url, mais não mostram o recebimento desses mesmos no backend Api, será que vc poderia mostrar um trecho de codigo em um exemplo de Select All com parametros sort, e limit
Oi Jailson tudo bem?
Nós só disponibiliza os endpoints e os layouts
para que os parceiros possam enviar as requisições
o backend de uma aplicação nunca fica exposto.
O que são expostos são os endpoints
grande abraço,
Fábio
Excelente, era o que eu precisava! Parabéns!
Bah que legal que te ajudamos Nathan. Abraço ai!
Olá, no meu caso especifico esta aparecendo a seguinte informação; Token de acesso invalido.
Opa Alisson tudo bem?
Você pode não estar informando o token, ou informando de forma incorreta.
É importante você verificar estas duas possibilidades.
Qualquer dúvida estamos aqui!
Marcelo, utilizando seu exemplo consegui fazer acesso rapidamente em um ambiente de teste, mas não estou conseguindo recuperar os dados da URL abaixo, consegue me dar uma ajuda?
curl –location -g –request GET ‘https://app-integracao.arboimoveis.com/api/imoveis?page=1&perPage=10&fields=[“ref_id”, “codigo”, “ativo”, “mobiliado”]&search={“mobiliado”: true}’
–header ‘Authorization: ‘
Não consigo o retorno.
Olá Ronaldo tudo bem?
Tomei a liberdade de desativar o link por segurança.
Sobre a sua dúvida….não conseguimos encontrar você em nossa base de clientes.
Você é cliente nosso?
Pergunto pois somente nossos clientes tem o token para acesso a nossa API, pelo nome da URL acredito que você não seja nosso cliente e tenha um desenvolvimento próprio?
Se sim, você deve verificar com o time de desenvolvimento sobre este erro ou a empresa contratada.
Fico à disposição para demais dúvidas, espero ter ajudado!
Ronaldo, esse link que você enviou precisa de login, a API não está pública?
Talvez este seja o problema se você não tem o token de acesso.
Infelizmente sem entender melhor não conseguimos te passar uma solução