API para os dados das eleições de 2014

Olá Pessoal!

Há quatro anos atrás, eu fiz uma API REST que deixaria disponível todos os dados das eleições para serem acessados usando HTTP com os dados do TSE.

Esse ano eu comecei um novo projeto, mas então encontrei o Transparência Brasil, que proporciona uma API muito completa com diversas informações sobre os candidatos, então não continuei o meu projeto…

O mais interessante dessa API é que ela já vem com exemplos de código e um API explorer muito bom(usando Swagger). Eles até estão organizando um hackthon, mas não me chamaram para participar 😦 no entanto, em um e-mail bem gentil, eles anunciaram essa API! 🙂

Se você é programador e quer fazer algo pelo seu país essa é uma grande oportunidade! Venha explorar a API e, se quiser, comente abaixo o que você criou!

 

Anúncios

JAX-RS com Java

Você acha verboso e chato? Acha que perde tempo escrevendo código repetivo? Especificações relativamente novas, como JSR 311 e JSR 317, provam o contrário.


Com o foco em POJOs, a programação fica bem mais simples e divertida com essas especificações. No caso da JSR- 311 (JAX RS – API para criação de WEB Services RESTful) é impressionante a facilidade de criação e disponibilização de WEB Services seguindo o modelo arquitetural REST.

Hoje terminei a primeira parte do livro RESTful Java with JAX-RS. O livro cobre toda a especificação, dá uma passada nas três maiores implementações(JBoss RESTEasy, Jersey e Apache CXF) e depois nos preenche com diversos exemplos usando JBoss RESTEasy, a impĺementação que o autor, Bill Burke, lidera.

A primeira parte consiste em apresentar toda a especificação, ou boa parte dela, com exemplos práticos. A melhor parte é que não fazendo “@PATH” e “@GET”, como pensei que seria, por outro lado. Acabei por fazer na prática coisas que eu só tinha lido antes, como escrever meus próprios MessageBodyReaders e MessageBodyWriters.

. Por estar bastante envolvido com RESTEasy, o autor fala com uma simplicidade de pontos que poderiam ser chatos em outras abordagem, como a possibilidade de estender a API para outros métodos além dos básicos que o HTTP oferece (GET, POST, PUT, DELETE, HEAD, TRACE). Bill também aproveita para criticar pontos da atual especificação, como a ausência da especificação para clientes REST.

A parte sobre HATEOS ficou clara e motivadora. Quando achamos que a primeira solução que o autor passa é suficiente (<link rel=”next” href=”…” />), ele mostra problemas dessa forma de fazer a linkagem de recursos e fala sobre linkar recursos usando o cabeçalho da request HTTP. (li algo sobre isso nesse post ontem).

Falando em cliente aí vem uma crítica minha para o livro. Senti que poderíamos explorar mais a parte de cliente do CXF e o do Jersey.(aproveitem e vejam esse artigo mostrando o RESTEasy cliente em ação)  Para o RESTEasy isso foi bastante explorado. É possível sair com um conhecimento bom de RESTEasy se seguida a segunda parte do livro, que só contém exemplos. Também não gostei do excesso de “Isso foge do escopo desse livro” e “Como isso é semelhante ao que foi falado para X, não irei abordar”, enche o saco as vezes (mas gosto é gosto).

A segunda parte, ao lado da forma que o autor mantém as coisas simples, com certeza é o maior diferencial do livro. Não pense que você vai ver exemplos chatos que parecem só tem enrolar, os exemplos estão todos com testes e sempre adicionam algo a mais do que o autor citou no capítulo que o exemplo é relacionado. Também achei interessante o uso de Maven e a explicação feita sobre como usar. No geral quando leio, enchem de linguiça e dá raiva depois usar.

Enfim, recomendo o livro! E se não aprenderem a fazer RESTful WEB Services usando Java depois desse livro, que atualmente só tem em inglês,  nunca mais votem em mim!

Candidato as a Service: Dados dos candidatos para as eleições disponíveis como serviços WEB

Está no ar a API que permite que você acesse dados dos candidatos das eleições desse ano programativamente.
O site do TSE é ótimo! Muito bom para seres humanos usarem e acessarem as informações, mas não para o seu programa (há não ser que você viva de Scrapping ou baixe os CSVs que eles disponibilizam). Como diriam Leonard Richardson e Sam Ruby:

You’ve built web sites that can be used by humans. But can you also build web sites that are usable by machines?

Com as ferramentas e APIs que temos hoje é fácil consumir um serviço, em qualquer linguagem, e o trabalho pode se resumir a algumas linhas de código.
Agora com os dados dos candidatos são imagináveis as oportunidades de aplicações que podem ser construídas. Infelizmente ela não foi terminada antes das eleições. Na verdade, começamos a trabalhar nela um pouco depois do segundo turno, mas a idéia, no caso das eleições, vai um pouco além de informações dos candidatos. Essa será a base para novos dados (processos, gastos nas eleições, etc) dos candidados, principalmente os eleitos. É claro que essas informações estão todas no site do TSE ou outros, mas distribuídas e não acessíveis pelo seu programa…

Espero continuar construindo serviços e tornar pelo menos um pouco real o que eu disse sobre dados públicos há uns meses atrás…

Serviço para informação sobre filmes/clipes musicais e clipes de jogos

Há tempos mexi com a API do IVA, Internet Video archive, e tinha me impressionado com a quantidade de informação e quão atual é, sem contar a arquitetura REST.
Enfim, enviei um tutorial sobre a API para o JavaFree, então, para quem interessar, segue.

RESTful WEB Services – O livro

Não sei se esse livro que estou lendo está me fazendo “lavagem” cerebral ou se está abrindo meus olhos/me educando:

É como se fosse uma clarificação da tese do Roy, que é bem vaga de certa forma. O livro mostra como aplicar o Http para criação de REST WEB Services.

Fazer um get para apagar/criar/editar é terminantemente proibido! Quando você faz isso você fere a ROA, arquitetura orientada a recursos que ele propõe no livro.

A ROA, por outro lado, é na verdade uma implementação do REST com uns esclarecimentos e algumas regras chatas. ROA usa complemente Http. Informações de método(PUT, GET e DELETE) da na URI fazem o serviço ser misto com RPC. Na prática isso significa que ser uma URI exige um get para criar assim, por exemplo:

/recurso/apagar?id=ID

fere profundamente o proposto no livro. Agora, preste atenção e descobrirá muitos serviços que funcionam dessa forma! O GET não deve modificar recurso! Nunca! Assim como PUT e DELETE devem ter idempotência ( é um conceito mais complicado, leia e tire suas conclusões 🙂 ),.

O mais interessante é que o livro mostra uma “carinha feliz”, na qual você pensa que vai ficar fazendo $.get em um monte de lugar para pegar dados e apresentar, no entanto, no primeiro ponto ele destrói essa idéia! Chega falando que é o primeiro material publicado a apresentar um padrão para o REST, depois ataca a complexidade do SOAP, fala que a comunidade REST pode se ofender com o proposto no livro e propõe a ROA. O livro é espetacular!

Por fim, não falta código no livro! Ele explora WEB Services de diversos serviços populares como o Flickr, Amazon S3, delicious. Usa o Ruby como linguagem, mas quem não sabe nada não se preocupe, ele explica tudo direitinho.

Estou na metade do livro, mas já aguentei o bastante para saber que vou até o fim (quem me conhece sabe o problema que tenho com livros: São dezenas lidos pela metade[só terminei o Gof, mas pulei umas partes ainda :S]).

Essa é minha opinião sobre o livro, caso discorde, ou se leu o livro e tem outra, comente!