Páginas

SyntaxHighlighter

Mostrando postagens com marcador CEP. Mostrar todas as postagens
Mostrando postagens com marcador CEP. Mostrar todas as postagens

sábado, 10 de novembro de 2012

Expondo uma API para busca de CEPs com Google Cloud Endpoints

No Google IO 2012 foi lançado (por enquanto só para trusted testers) o Google Cloud Endpoints.
É um novo serviço do GAE que facilita (e muito) a publicação de APIs RESTful ou JSON RPC.
Na verdade as facilidades vão muito além do servidor. Foi incorporado no GPE (Google Plugin para Eclipse) um "gerador" que dada uma API, gera o código necessário para acessá-la de clientes: Android (Java) e/ou iOS (objective C). Além disso também é possível acessar os serviços via javascript usando o Google APIs Client Library for Javascript (mesma biblioteca utilizada para utilização das APIs Google).


Para testar esse novo serviço, me inscrevi no programa de trusted testers e criei uma aplicação que expõe uma API REST para busca de CEPs - usando uma biblioteca Java para busca de CEPs que criei um tempo atrás.
A aplicação possui apenas uma única classe: CepEndpoint. O gist abaixo mostra como o código é simples e como algumas simples anotações são suficientes para publicar um endpoint composto por alguns serviços.
Loading ....

Para testar a API publicada pode-se usar o Google APIs Explorer ou o "clientzinho web" que criei que invoca esse mesmo endpoint usando a API javascript.
Loading ....

Se derem uma olhada no código fonte, verão que aproveitei também pra dar uma treinada no desenvolvimento de aplicações HTML5 usando Angular JS e Bootstrap.

Use o link abaixo para acessar a aplicação:
http://busca-cep.appspot.com/

sexta-feira, 6 de julho de 2012

API Java para busca de CEPs (fachada para o serviços dos Correios)

O site dos Correios disponibiliza gratuitamente um ótimo serviço para busca online de CEPs.
Porém, essa é a única forma de acessá-lo: via página HTML.
Não existe, nem é exposta, nenhuma API que facilite a integração desse serviço com outras aplicações.

Para possibilitar esse tipo de integração, criei o busca-cep-java-client que nada mais é que um componente Java (jar) cuja API abstrai a complexidade de:
  1. Fazer a requisição HTTP (GET) passando os parâmetros necessários e;
  2. Processar a resposta - extraindo os dados de CEP do HTML retornado. 
Internamente utilizo a biblioteca HtmlUnit para auxiliar no Web Scraping. Basicamente o que eu faço é simular um usuário que entra na página de busca, preenche e posta o form. Depois, já na tela de resultados, percorro o HTML retornado em busca da tabela com os dados de CEP retornados.

O trecho de código abaixo mostra o quão simples é a utilização da API:

// Obtém uma instância de CEPService
CEPService buscaCEP = CEPServiceFactory.getCEPService();
// Obtém um CEP pelo número
CEP cep = buscaCEP.obtemPorNumeroCEP(13084440);
// Obtém todos os CEPs que contém "Flordalisa" no logradouro
List<CEP> ceps = buscaCEP.obtemPorEndereco("Flordalisa");

Para mais detalhes em como utilizar esse componente, sugiro dar uma olhada nos testes unitários.
Todo o código fonte também está disponível no Github.
Além disso, publiquei a versão 1.1 do componente num repositório Maven (também no Github).
Para quem usa essa ferramenta basta alterar o pom.xml para incluir o repositório:

<repository>
        <id>Talesolutions</id>
        <url>https://raw.github.com/fabito/talesolutions-mvn-repo/master/</url>
        <snapshots>
                <enabled>true</enabled>
        </snapshots>
        <releases>
                <enabled>true</enabled>
        </releases>
</repository>

E adicionar essa dependência:

    <dependency>
      <groupId>org.talesolutions</groupId>
      <artifactId>busca-cep-client</artifactId>
      <version>1.1</version>
    </dependency>

Considerações Finais

O busca-cep-client ajuda a integrar funcionalidades de busca de CEPs à aplicações Java. Principalmente porque dispensa a criação de uma base de CEPs local e como é só uma façade para o serviço oficial dos Correios temos a "garantia" de estarmos sempre acessando dados atuais e corretos.
A principal desvantagem é a dependência da disponibilidade e formato desse serviço - alto acoplamento. Se o site dos Correios sair do ar sua aplicação certamente será impactada. Além disso, como os dados de CEPs são extraidos de uma página HTML, qualquer mudança no markup gerado afetará o funcionamento do componente.