Spring SOA, REST e Open Graph Facebook
Conforme deixei um aperitivo em meu post anterior :), neste vou deixar um exemplo de como efetuar login no Facebook através de uma requisição informando um access_token como validador. Basicamente a funcionalidade desta aplicação tem por receber um token válido gerado pelo facebook e retornar os dados desejados do usuário.
Crie um projeto SOA com o composite em branco. Antes de mais nada, já vamos criar nossas classes java para então prosseguirmos com a aplicação do Spring Contex. Clique com o botão direito em Application Sources > New, procure por interface e adicione uma interface de modo a ficar conforme o código apresentado abaixo.
public String[] InterFace(String accessToken);
Adicione a classe onde sua interface será implementada seguindo a mesma estrutura de criação. Implemente sua interface e já cria uma variável com o nome que desejar, só que passando o valor conforme apresentado:
private static String facebookService = "https://graph.facebook.com/me?access_token=";
O valor desta variável será o responsável por validar o access_token que será informado e retornar os dados com sucesso. Ela é composta por “../me..” que é a informação do usuário, por exemplo, um ID, e também é composta por “…?access_token=” que deve informando pela aplicação desenvolvida no facebook.
OBS.: Para esse tutorial, estou levando em conta que você já tenha uma aplicação criada junto a parte de developers do facebook e que sua aplicação já esteja efetuando suas funcionalidades esperadas. Ou seja, é o resultado desta sua aplicação que tem o valor do access_token que deverá ser informado para esta nossa aplicação.
Prosseguindo com a nossa implementação, crie um método que será responsável por efetuar a construção da url e chama-lá junto ao facebook para autenticar. A seguir irei apresentar alguns trechos deste método, onde primeiramente efetuar a declaração do método para receber o token que será informado e efetuo as declarações necessárias durante a implementação.
private static String facebookConnection(String token) { HttpURLConnection connection = null; OutputStream wr = null; BufferedReader rd = null; StringBuilder sb = null; String line = null; URL serverAddress = null;
A seguir, vamos efetuar a construção da nossa url onde é informado a variável que declaramos logo no início e depois passamos o token que receberá o valor para concluir o conteúdo.
serverAddress = new URL(facebookService + token);
Depois, abrimos a conexão e setamos o request com o método “GET“:
connection = (HttpURLConnection)serverAddress.openConnection(); connection.setRequestMethod("GET");
Faça os procedimentos com o InputStreamReader e efetue a leitura do retorno, conforme seus conhecimentos. Implementado este método, declare um novo que será responsável por extrair o conteúdo de retorno do JSON.
Antes de continuar, vale deixar uma ressalva neste ponto que deixei passar no início deste tutorial. Para efetuar a manipulação do JSON estou usando a biblioteca json-simple, para mais informações acesse: http://code.google.com/p/json-simple/.
Aqui, apresento como ficou a declaração do meu método que fará a extração dos dados do JSON de retorno:
private String[] extractFacebookFromJSON(String response) { String facebook[] = new String[2]; if (response != null) { final JSONObject jsonObj = (JSONObject)JSONValue.parse(response); final String id = (String)jsonObj.get("id"); facebook[0] = id; final String first_name = (String)jsonObj.get("first_name"); facebook[1] = first_name; } return facebook; }
Note que apenas estou extraindo os o “ID” e o “FIRST_NAME” que constam no facebook, mas você pode extrair qualquer dado, conforme constam em https://developers.facebook.com/tools/explorer.
Volte para o composite, adicione o componete Spring Context, para isso, navegue pelo Componente Pallete
Agora abra o ComponentType criado pelo Spring e adicione o path onde encontra-se sua Interface, veja:
<service name="facebookMediator"> <interface.java interface="br.com.gualda.soa.spring.facebook.IFacebook"/> </service>
Abra o XML do Spring que acabou de criar e adicione o bean preenchendo com o ID e a classe que consta sua implementação.
<bean id="facebook" class="br.com.gualda.soa.spring.facebook.FacebookImp"/>
Em seguida adicione a tag “service” que será responsável por linkar com sua Interface criada, para isso:
<sca:service name="facebookMediator" target="facebook" type="br.com.gualda.soa.spring.facebook.IFacebook"/>
Crie um XSD que tenha como entrada uma string que receberá o token, e na saída duas strings que receberão o ID e o First_Name. Depois, adicione o Mediator no composite, faça a ligação junto ao xsd criado e em seguida arraste o spring ao mediator. Se tudo ocorrer como esperado, seu composite está assim:
Abra o mediator e crie os transformations de entrada e saída. Faça a ligação de entrada e de retorno. No caso do retorno, como o retorno é um JSON, você irá precisar atribuir a posição de cada elemento de retorno. Lembrando que neste nosso tutorial estamos apenas pegando o “ID” e o “FIRST_NAME”. Veja abaixo o trecho do xlt de retorno:
<fbk:outputFacebook> <fbk:id> <xsl:value-of select="/tns:InterFaceResponse/return[1]"/> </fbk:id> <fbk:first_name> <xsl:value-of select="/tns:InterFaceResponse/return[2]"/> </fbk:first_name> </fbk:outputFacebook>
Agora, faça o deploy. Ao executar você verá uma tela conforme apresentada abaixo:
Se tudo ocorrer conforme o esperado, o returno esperado é apresentado abaixo, onde temos o id e first_name.
O projeto pode ser baixando através do gitHub: https://github.com/bgualda/GetFacebookRest
Fontes:
Spring Context: http://docs.oracle.com/cd/E15586_01/integration.1111/e10224/sca_spring.htm
Facebook Developers: https://developers.facebook.com/