Problemas com CEP? Aprenda a construir uma API PHP segura! 🚀
Você já precisou consultar um CEP automaticamente em um sistema PHP? Neste artigo, vamos explorar como consumir a API pública do ViaCEP utilizando PHP + cURL, recebendo um JSON com todas as informações do endereço e tratando a resposta de forma simples e segura. Uma habilidade essencial para qualquer desenvolvedor backend que trabalha com integrações de API.
Como consumir a API ViaCEP com PHP e cURL: Guia completo para consulta de CEP
Você já precisou consultar um CEP automaticamente em um sistema PHP? Neste Short eu mostro como consumir a API pública do ViaCEP utilizando PHP + cURL, recebendo um JSON com todas as informações do endereço e tratando a resposta de forma simples e segura. O exemplo utiliza o CEP 01001-000, correspondente à Catedral da Sé, localizada na Praça da Sé, centro de São Paulo. A partir desse único dado é possível recuperar logradouro, bairro, cidade, estado, DDD, código IBGE e diversas outras informações úteis para aplicações reais.
Problemas com CEP? Aprenda a construir uma API PHP segura! 🚀
"A integração com APIs é a espinha dorsal do desenvolvimento web moderno. Saber consumir serviços externos de forma eficiente e segura é o que separa um desenvolvedor funcional de um desenvolvedor profissional."
O que é a API ViaCEP?
O ViaCEP é uma API pública gratuita que permite consultar informações de endereço a partir de um CEP brasileiro. Ela retorna dados como logradouro, bairro, cidade, estado, DDD, código IBGE e muito mais.
Este serviço é amplamente utilizado em sistemas de cadastro, e-commerces, ERPs, CRMs e aplicações corporativas. Em vez de obrigar o usuário a preencher todo o endereço manualmente, basta informar o CEP para que os demais campos sejam preenchidos automaticamente.
💡 Dica: O ViaCEP é gratuito e não requer autenticação, sendo perfeito para testes e projetos de pequeno a médio porte.
Por que usar cURL no PHP?
O cURL é uma biblioteca que permite fazer requisições HTTP de forma rápida e segura. No PHP, é a ferramenta padrão para consumir APIs e serviços externos.
Principais vantagens do cURL:
- Flexibilidade: Suporta diversos protocolos (HTTP, HTTPS, FTP, etc.)
- Segurança: Permite configurar SSL/TLS, headers e autenticação
- Performance: Requisições rápidas e eficientes
- Controle: Configurações detalhadas de timeout, redirecionamento, etc.
Estrutura da API ViaCEP
A API ViaCEP possui uma URL simples e intuitiva:
// URL base
https://viacep.com.br/ws/{cep}/json/
// Exemplo com CEP 01001-000
https://viacep.com.br/ws/01001000/json/
O retorno da API é um JSON com os seguintes campos:
{
"cep": "01001-000",
"logradouro": "Praça da Sé",
"complemento": "lado ímpar",
"unidade": "",
"bairro": "Sé",
"localidade": "São Paulo",
"uf": "SP",
"estado": "São Paulo",
"regiao": "Sudeste",
"ibge": "3550308",
"gia": "1004",
"ddd": "11",
"siafi": "7107"
}
Implementando a consulta em PHP
Vamos construir uma classe PHP completa para consumir a API ViaCEP:
<?php
class Cep {
private $url = "https://viacep.com.br/ws/{cep}/json/";
private $resposta = null;
private $ch = null;
public function __construct($cep = null){
if($cep !== null){
$this->url = str_replace("{cep}", $cep, $this->url);
$this->consulta();
$this->toString();
}
}
private function consulta(){
$this->ch = curl_init($this->url);
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($this->ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
curl_setopt($this->ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Content-Type: application/json'
]);
$this->resposta = curl_exec($this->ch);
}
private function toString(){
$dados = json_decode($this->resposta, true);
if(is_array($dados) && isset($dados["localidade"])){
print_r($dados);
} else {
echo "Não foi possível localizar o CEP." . PHP_EOL;
}
}
public function __destruct(){
if($this->ch){
curl_close($this->ch);
}
}
}
// Executando a consulta
new Cep("01001000");
Exemplo de saída
Ao executar o código com o CEP 01001-000 (Catedral da Sé em São Paulo), obtemos:
Array
(
[cep] => 01001-000
[logradouro] => Praça da Sé
[complemento] => lado ímpar
[unidade] =>
[bairro] => Sé
[localidade] => São Paulo
[uf] => SP
[estado] => São Paulo
[regiao] => Sudeste
[ibge] => 3550308
[gia] => 1004
[ddd] => 11
[siafi] => 7107
)
O CEP 01001-000 corresponde à Catedral da Sé, localizada na Praça da Sé, no bairro da Sé, no centro da cidade de São Paulo, SP.
Explicando o código passo a passo
1. Propriedades da classe
private $url = "https://viacep.com.br/ws/{cep}/json/";
private $resposta = null;
private $ch = null;
$url: URL base da API com placeholder{cep}$resposta: Armazena a resposta da API$ch: Handle da conexão cURL
2. Construtor
public function __construct($cep = null){
if($cep !== null){
$this->url = str_replace("{cep}", $cep, $this->url);
$this->consulta();
$this->toString();
}
}
- Recebe o CEP como parâmetro opcional
- Substitui o placeholder na URL
- Chama os métodos
consulta()etoString()
3. Método consulta()
private function consulta(){
$this->ch = curl_init($this->url);
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($this->ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
curl_setopt($this->ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Content-Type: application/json'
]);
$this->resposta = curl_exec($this->ch);
}
As opções do cURL configuradas:
CURLOPT_RETURNTRANSFER: Retorna a resposta como stringCURLOPT_SSL_VERIFYPEER: Desabilita verificação SSL (para ambientes sem certificado)CURLOPT_FOLLOWLOCATION: Segue redirecionamentosCURLOPT_USERAGENT: Define um User-Agent válidoCURLOPT_HTTPHEADER: Define headers da requisição
4. Método toString()
private function toString(){
$dados = json_decode($this->resposta, true);
if(is_array($dados) && isset($dados["localidade"])){
print_r($dados);
} else {
echo "Não foi possível localizar o CEP." . PHP_EOL;
}
}
json_decode(): Converte a resposta JSON para array- Validação: Verifica se o campo
localidadeexiste - Tratamento de erro: Exibe mensagem se o CEP não for encontrado
5. Destrutor
public function __destruct(){
if($this->ch){
curl_close($this->ch);
}
}
__destruct(): Fecha a conexão cURL automaticamente- Boa prática: Libera recursos ao final do script
Melhorias e boas práticas
Podemos melhorar a classe com algumas funcionalidades adicionais:
<?php
class Cep {
private $url = "https://viacep.com.br/ws/{cep}/json/";
private $dados = null;
private $erro = null;
public function __construct($cep) {
$this->consultar($cep);
}
public function consultar($cep) {
$cep = preg_replace('/\D/', '', $cep);
$url = str_replace("{cep}", $cep, $this->url);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$resposta = curl_exec($ch);
if (curl_errno($ch)) {
$this->erro = "Erro na requisição: " . curl_error($ch);
curl_close($ch);
return false;
}
curl_close($ch);
$this->dados = json_decode($resposta, true);
if (isset($this->dados['erro'])) {
$this->erro = "CEP não encontrado";
$this->dados = null;
return false;
}
return true;
}
public function getDados() {
return $this->dados;
}
public function getErro() {
return $this->erro;
}
public function getEnderecoCompleto() {
if (!$this->dados) return null;
return $this->dados['logradouro'] . ', ' .
$this->dados['bairro'] . ', ' .
$this->dados['localidade'] . ' - ' .
$this->dados['uf'];
}
}
// Usando a classe melhorada
$cep = new Cep("01001000");
if ($cep->getDados()) {
print_r($cep->getDados());
echo "\nEndereço completo: " . $cep->getEnderecoCompleto() . PHP_EOL;
} else {
echo "Erro: " . $cep->getErro() . PHP_EOL;
}
Conclusão
Consumir APIs externas é uma habilidade essencial para qualquer desenvolvedor backend. O ViaCEP é um exemplo perfeito de como integrar serviços de terceiros de forma simples e eficiente.
Neste artigo, você aprendeu:
- ✅ O que é a API ViaCEP e como ela funciona
- ✅ Como usar cURL no PHP para fazer requisições HTTP
- ✅ Como tratar respostas JSON de forma segura
- ✅ Como organizar o código em classes reutilizáveis
- ✅ Boas práticas para consumo de APIs
💡 Lembre-se: A integração com APIs é a espinha dorsal do desenvolvimento web moderno. Dominar ferramentas como cURL e saber consumir serviços REST é fundamental para qualquer desenvolvedor que deseje construir aplicações completas e profissionais.
🤔 O que você achou?
💬 Quer aprender JavaScript do ZERO? Comece agora a escrever seu primeiro código e seus fundamentos!
❓ FAQ: Perguntas Frequentes sobre API ViaCEP e PHP
🎬 Assista ao Vídeos completo sobre Refatoração
O vídeo foi feito em Javascript mais o conceito pode ser utilizado em qualquer outra linguagem de programação..
🎬 Assista ao Vídeos completo sobre Refatoração
🔗 Conecte-se Comigo
💬 Você já utilizou o ViaCEP em algum projeto? Ou prefere outra API para consulta de endereços? Escreva nos comentários qual integração você gostaria de ver em um próximo artigo! 👇
#PHP #API #ViaCEP #Backend #Programacao #DesenvolvimentoWeb #ProgramacaoPHP #BackendDeveloper #APIREST #JSON #cURL #LogicaDeProgramacao #RogerioPontesTI