Gastaldi's Blog

Mais um blog sobre Java …

Criando um cliente REST para Código de barras 2D

De acordo com a wikipédia, um código de barras 2D pode ser usado para capturar informações  (sejam elas impressas, ou disponíveis na tela do seu computador) usando a câmera de um celular comum (com um software especial instalado).

Existem muitos sites online que já oferecem gratuitamente este serviço para geração de uma imagem PNG a partir de um texto. Com a ajuda do RESTEasy, podemos criar um cliente REST que, passados os devidos parametros, gere essa imagem sem preocuparmos com a comunicação HTTP.

Para esse exemplo, escolhi usar o serviço disponível em http://qrcode.kaywa.com/, mas você pode utilizar a API do Google Chart para o mesmo.

Primeiro criamos a interface:

public interface QRCodeClient {

    @GET
    @Produces("image/png")
    public byte[] createImage(
            @QueryParam("s") int size, 
            @QueryParam("d") String text);
}

Podemos criar uma classe utilitária para utilizar somente as APIs padrão REST

import javax.ws.rs.core.MultivaluedMap;

import org.jboss.resteasy.client.ProxyFactory;
import org.jboss.resteasy.plugins.providers.RegisterBuiltin;
import org.jboss.resteasy.specimpl.MultivaluedMapImpl;
import org.jboss.resteasy.spi.ResteasyProviderFactory;

public class RestHelper {
    static {
        // this initialization only needs to be done once per VM
        ResteasyProviderFactory.initializeInstance();
        RegisterBuiltin.register(ResteasyProviderFactory.getInstance());
    }

    /**
     * Cria um mapa de acordo com a implementacao REST
     * @return
     */
    public static MultivaluedMap<String, String> createMultivaluedMap() {
        return new MultivaluedMapImpl<String, String>();
    }

    /**
     * Cria um client usando Apache HTTP Client.
     * Mais informacoes em http://wiki.jboss.org/wiki/RESTeasyClientFramework
     * @param &lt;T&gt;
     * @param clientClass
     * @param restURL
     * @return
     */
    public static <T> T createClient(Class<T> clientClass, String restURL) {
        if (!clientClass.isInterface()) {
            throw new IllegalStateException("Client Class must be an interface !");
        }
        return ProxyFactory.create(clientClass,restURL);
    }

}

Por último, podemos testar nosso cliente REST com uma classe qualquer:

QRCodeClient client = RestHelper.createClient(QRCodeClient.class, "http://qrcode.kaywa.com/img.php");
byte[] img = client.createImage(5, "Oi Mundo REST !!!");

O Array de bytes será o conteúdo de uma imagem PNG. Note que não foi necessário implementar nenhum código HTTP para gerar a imagem : O RESTEasy já faz isso pra você.

Essa é uma das várias utilidades da tecnologia REST. Algo muito bacana que realmente vicia.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: