Criação de um aplicativo JSON e pureXML, Parte 3: Crie dispositivos OpenSocial para pureXML

Defina, implemente e teste dispositivos OpenSocial para interagir com o JSON Universal Services

Com a tecnologia Web 2.0 de dispositivos OpenSocial, os desenvolvedores podem facilmente incluir seus aplicativos em Web sites populares, como iGoogle, MySpace, Hi5, LinkedIn, e outros. Neste artigo, explore dispositivos OpenSocial através da criação prática de um aplicativo que alavanca o recurso pureXML® do DB2®. Este artigo é o último de uma série de três que ilustra como criar um aplicativo pureXML cuja interface com o usuário é um dispositivo que pode ser implementado em qualquer Web site compatível com OpenSocial. Siga as etapas neste artigo para criar uma interface com o usuário que armazena e recupera os dados JSON descritos no primeiro artigo através do JSON Universal Services criado no segundo artigo.

Han Nguyen, Staff Software Engineer, IBM  

Photo of Han NguyenHan Nguyen é uma engenheira de software que trabalha em padrões emergentes com foco em Computação Social através de diversos produtos e segmentos de mercado verticais. Ela trabalhou anteriormente com diversas tecnologias em ativação de software e serviços.



Andy Smith, Advisory Software Engineer, IBM

Photo of Andy SmithAndy Smith é um engenheiro de software trabalhando em padrões emergentes, com foco na aplicação de tecnologias relacionadas a redes sociais em vários segmentos de mercado verticais e produtos. Ele trabalhou anteriormente com diversas tecnologias de Web e portal na ativação de serviços e software.



Mark Weitzel, Software Architect, IBM

Photo of Mark WeitzelMark Weitzel é Membro da Equipe Técnica Senior na equipe de Padrões Emergentes e Software Livre do IBM Software Group focando em redes sociais. Antes disso, Weitzel, como parte da equipe de Computação Autônoma Tivoli, foi responsável por diversas iniciativas de gerenciamento de sistemas de software livre em Eclipse e Apache.



30/Nov/2009

Histórico do OpenSocial

OpenSocial é uma especificação dirigida à comunidade que define um modelo de componente com base em navegador, conhecido como dispositivos, e uma API para acessar informações sobre informações de perfil do usuário, bem como seu gráfico social (incluindo coisas como seus amigos e atividades). Aplicativos implementando as APIs serão interoperáveis com um amplo conjunto de sites de rede social, como: iGoogle, MySpace, Yahoo, Orkut, Hi5, LinkedIn, e outros. Neste artigo, focaremos em dispositivos OpenSocial e mostraremos como eles podem ser uma maneira potente de ampliar o alcance do seu aplicativo através da Web.

Termos usados frequentemente

  • API: Application programming interface
  • CSS: Cascading stylesheets
  • HTML: HyperText Markup Language
  • HTTP: Hypertext Transfer Protocol
  • JSON: JavaScript Object Notation
  • SOA: Service Oriented Architecture
  • UI: User interface, ou Interface com o Usuário
  • URL: Uniform Resource Locator
  • XML: Extensible Markup Language

O que é um dispositivo OpenSocial?

  • Um dispositivo OpenSocial é a pequena apresentação de um aplicativo da Web que implementa um conjunto específico de APIs. Um dispositivo é descrito por um documento XML em conformidade com as especificações OpenSocial. Essa definição contém a interface com o usuário, como HTML, folhas de estilo CSS e JavaScript para a lógica de negócios e metadados adicionais para o autor, título, e assim por diante.
  • Um site que implementa a especificação OpenSocial e pode hospedar aplicativos é chamado de contêiner OpenSocial. Isso significa que pode processar as definições XML do dispositivo e fornecer o HTML adequado para o navegador. É importante perceber que as definições do dispositivo não precisam estar hospedadas no site que fornece o contêiner. Além disso, os dispositivos tipicamente expõem um serviço a partir de um site completamente diferente. O contêiner fornece mecanismos, como solicitações HTML assinadas, para fornecer um nível de garantia que as chamadas originadas a partir do dispositivo no seu site. Sendo um contêiner OpenSocial, um site pode fornecer uma maneira fácil de agregar uma coleção de serviços de toda a Web.

Criação do dispositivo

Esta página fornece ao usuário o recurso para testar o conjunto básico de funções fornecido pelo Universal Services e exibe os resultados ao usuário.

A Figura 1 é uma captura de tela do aplicativo de teste de amostra. Servirá como o modelo a ser usado para criar o dispositivo OpenSocial de amostra. Fornece ao usuário os recursos de UI básicos necessários para interagir com o Universal Services.

Figura 1. O aplicativo de teste de amostra
O aplicativo de teste de amostra

Primeiro, serão criadas algumas funções JavaScript para fornecer as consultas básicas que controlam as conexões aos serviços pureXML. Então será adicionado HTML de suporte junto com a especificação do dispositivo. Por fim, você verá como criar e implementar esse aplicativo.

As funções JavaScript para conexão aos serviços pureXML

A Listagem 1 fornece o JavaScript de amostra criado para tratar as solicitações.

Listagem 1. Funções PureJSON JavaScript
var prefs = new gadgets.Prefs();
function getPrimaryKeys()	{
	var args = {};
	doPOST("getPrimaryKeys",args,displayJSONobj);  
};
function getJSONDocumentByKey(key)	{
	var args = {
	  id: key
	};
	doPOST("getDocumentByKey",args,displayJSONobj);  
};
function insertJSON(key, data)	{
	var args = {
	  id: key,
	  doc: data
	};
	doPOST("insert",args,response);  
};
function updateJSON(key, data)	{
	var args = {
	  id : key,
	  doc : data
	};
    doPOST("update",args,response);    
};
function deleteDocument(key)	{
	var args = {
	  id : key
	};
    doPOST("delete",args,response);
};
function doPOST(command,args,processResponseCallback)	{
	var url = "http://" + prefs.getString("pureXMLHostAddress") + 
			"/" + prefs.getString("contextRoot") + "/query/"+command;
	var params = {};
	postdata = gadgets.io.encodeValues(args);
	params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
	params[gadgets.io.RequestParameters.POST_DATA]= postdata;
	gadgets.io.makeRequest(url, processResponseCallback, params);
};
function response(obj)	{
	alert("Gadget implementation responsibility.");
};
function displayJSONobj(obj)	{
	alert("Gadget implementation responsibility.");
};

Veja o objetivo de cada função:

  • getPrimaryKeys posta uma solicitação getPrimaryKeys para o serviço para recuperar todas as chaves principais da tabela DB2 e exibe o resultado usando a função de retorno de chamada displayJSONobj quando a transação é concluída.
  • getJSONDocumentByKey usa um valor chave para postar um getDocumentByKey para o serviço para recuperar um único registro JSON com a chave principal combinando com o valor inserido. Exibe o resultado usando a função de retorno de chamada displayJSONobj.
  • insertJSON espera dois parâmetros de entrada: o valor de chave único para a chave principal e os dados de linha no formato JSON. Posta uma solicitação para o serviço para criar uma nova linha na tabela DB2 e confirma o status de inserção quando a transação retorna usando a função de retorno de chamada response.
  • updateJSON fornece o recurso para postar uma solicitação para o serviço para atualizar um registro JSON com a chave principal combinando com o valor da chave de entrada, e os dados atualizados especificados como os dados de entrada no formato JSON. Também chamará a função de retorno de chamada response para confirmar a atualização quando a transação for concluída.
  • deleteDocument fornece a interface para postar uma solicitação de remover registro para o serviço com base na chave principal de entrada especificada. Também chama a função de retorno de chamada response para confirmar a exclusão depois que a solicitação é concluída.
  • displayJSONobj é uma função JavaScript abstrata que fornece um gancho que desenvolvedores fornecerem diferentes abordagens para renderizar os resultados da chamada no navegador.
  • response é uma função que trata valores de retorno que não são JSON. Segue uma estratégia similar como displayJSONobj esperando que os desenvolvedores substituam a função pela sua própria implementação.

As funções acima chamam a função doPOST para enviar suas solicitações. A função doPOST espera o comando da consulta de serviço, valores de entrada de consulta e uma função de retorno de chamada para processar o resultado retornado dos serviços. Usa esses parâmetros de entrada para criar chamadas gadgets.io.makeRequest para os serviços. gadgets.io.makeRequest é uma função de dispositivos OpenSocial que fornece o suporte para dispositivos para obter dados de e postar dados para sites de terceiros. Sua assinatura se parece com isto: gadgets.io.makeRequest(url, callback, opt_params)

Os parâmetros são:

  • url - Uma cadeia de caracteres contendo a URL do site para o qual você deseja enviar a solicitação. É possível ver que, para criar a URL, a função doPOST recupera duas cadeias de caracteres do objeto prefs usando o método getString. (Os parâmetros, pureXMLHostAddress e contextRoot, referem-se a nomes de elemento na definição do dispositivo, o que será abordado na próxima seção.) Essas duas cadeias de caracteres são concatenadas com /query/ e o comando (insert, getDocumentByKey, update, delete, e assim por diante). Por exemplo, quando a função insertJSON() chama doPOST, a URL é:
    http://xmlim.watson.ibm.com:9080/JSONUniversalServices/query/insert
  • callback - Uma referência a uma função que será chamada quando a solicitação retorna. Por exemplo, response é uma função de retorno de chamada que exibe o status de uma transação, e displayJSONobj é uma função de retorno de chamada que exibe o objeto JSON retornado ou uma mensagem, se o objeto estiver vazio.
  • opt_params - Um objeto JavaScript contendo parâmetros adicionais para a chamada (o método HTTP e os dados POST). Definimos o método HTTP para a solicitação como gadgets.io.MethodType.POST para indicar que é um método POST. Também passamos os dados post no objeto postdata (especificado como um objeto contendo pares chave/valor usando gadgets.io.encodeValues() para formatar a entrada args).

Salve a Listagem 1 como PureJSON.js. Você criará a definição do dispositivo e carregará esse arquivo na próxima etapa.

Definição do dispositivo OpenSocial

Agora que você possui o JavaScript necessário, criará a definição do dispositivo.

Criação de XML de definição de dispositivo

É necessária uma definição de dispositivo simples. A Listagem 2 fornece a definição de dispositivo de amostra. Cada definição de dispositivo é anexada em um tag <Module>. <ModulePrefs> define as informações e recursos básicos para o dispositivo.

Listagem 2. A definição XML para o dispositivo OpenSocial
<?xml version="1.0" encoding="UTF-8"?>
<Module>
 <ModulePrefs title="Universal Services">
   <Require feature="opensocial-0.8"/>
   <Require feature="dynamic-height"/>
   <Require feature="minimessage"/>
 </ModulePrefs>
 <UserPref name="pureXMLHostAddress" 
 	  display_name="PureXML Host Address" 
 	  default_value="xmlim.watson.ibm.com:9080"/>
 <UserPref name="contextRoot" 
 	  display_name="Context Root" 
 	  default_value="JSONUniversalServices"/>

 <Content type="html">
 <![CDATA[
	<!-- Note: We will add more code and expand this section later  -->
  ]]>
 </Content>
</Module>

A primeira coisa que você perceberá na definição do dispositivo é o atributo <title> no elemento <ModulePrefs>. É possível especificar atributos definindo informações para o dispositivo, como título, autor, e-mail, e assim por diante. Para os fins deste demo, usaremos apenas o atributo title. É importante observar, porém, que alguns contêineres exigem que certos atributos sejam fornecidos para a implementação ativa. Será necessário consultar a documentação do desenvolvedor da plataforma para obter essas informações.

Você também fornecerá os recursos de que o dispositivo precisa. O dispositivo de amostra carregará os seguintes recursos:

  • opensocial-0.8 - Esse dispositivo usa as APIs de implementação OpenSocial versão 0.8 e, portanto, pode ser implementado em contêineres que suportam a especificação OpenSocial v0.8.
  • dynamic-height - Com esse recurso, o desenvolvedor do dispositivo tem a capacidade de redimensionar a altura do dispositivo conforme conteúdo é adicionado ou removido. Isso é chamado quando se exibe ou remove as mensagens de transação DB2 no dispositivo.
  • minimessage - Esse recurso fornece um conjunto de APIs para criar e exibir mensagens a usuários no dispositivo. Usamos minimessage para criar mensagens de status de transação DB2 neste exemplo.

Também foi definido um conjunto de preferências do usuário (<UserPref>) para definir dinamicamente o ponto final do pureXML Universal Service e o caminho de contexto do aplicativo para o qual o dispositivo será implementado. Os elementos <UserPref> são expostos como entrada do usuário na interface do dispositivo quando o dispositivo é renderizado. O usuário então pode editar e modificar essas configurações adequadamente. Observe que o atributo name para esses elementos <UserPref> são os mesmos nomes usados na função JavaScript doPOST na Listagem 1 para obter as cadeias de caracteres usadas para criar a URL de ponto final.

Quarto, a seção de conteúdo <Content> define o tipo de conteúdo do dispositivo, que é HTML. Na seção CDATA (dados de caractere), foi definido o conteúdo do dispositivo em si, quando uma tabela HTML foi criada para capturar a entrada do usuário, em combinação com funções minimessage, preferências do usuário e JavaScript para tornar-se um dispositivo em execução. Esta seção será ampliada na próxima etapa para criar um cliente conectando-se aos serviços pureXML.

Adicionando conteúdo ao dispositivo

Na seção CDATA da definição do dispositivo descrita na etapa anterior, agora adicione a tabela HTML de amostra e as funções JavaScript para capturar entrada do usuário e ações.

Primeiro, adicione a folha de estilo usada na tabela HTML como na Listagem 3.

Listagem 3. A folha de estilo usada para a tabela
  <style type="text/css">
   table.layout {border:0; width:50%;}
   td.green {background-color:#BFFF80; 
      font-family:sans-serif, verdana;}      
   td.white {background-color:#FFFFFF; 
      font-family:sans-serif, verdana;}      
   th.green {background-color:#BFFF80; 
      font-family:sans-serif, verdana;}   
   th.white {background-color:#FFFFFF; 
      font-family:sans-serif, verdana;}   
   td.row-bright{background-color:#FFFFBF; 
      font-family:sans-serif, verdana; 
      text-align:center;}
   td.row-dark {background-color:#FFFF8C; 
      font-family:sans-serif, verdana; 
      text-align:center;}
   tr.row-bright {background-color:#FFFFBF; 
      font-family:sans-serif, verdana;}
   tr.row-dark {background-color:#FFFF8C; 
      font-family:sans-serif, verdana;}
   tr.empty {background-color:#FFFFFF; 
      height: 10px;}
   tr.empty-small {background-color:#FFFFFF; 
      height: 5px;}
  </style>

Segundo, inclua o arquivo JavaScript, PureJSON.js, da Listagem 1. No momento em que o dispositivo estiver carregado, o PureJSON.js será incluído na página, disponibilizando todas as funções de solicitação POST para as ações da tabela HTML.

Listagem 4. Carregando o arquivo JavaScript
 <script type="text/javascript" src="./PureJSON.js"></script>

Terceiro, adicione outra tag <script> como na Listagem 5. Cada função JavaScript combina uma ação do usuário declarada na tabela HTML (que você definirá na próxima seção), e chama uma das funções definidas em PureJSON.js da Listagem 1. Quando esse bloco de código estiver carregado, um objeto minimessage é criado usando new gadgets.MiniMessage(_MODULE_ID_). A função gadgets.util.registerOnLoadHandler(gadgets.window.adjustHeight), na parte inferior da tag, é chamada para registrar o dispositivo com o contêiner OpenSocial, dizendo-lhe para modificar a estrutura para ajustar-se ao conteúdo do dispositivo no momento da renderização. Nessa tag de script, também substituímos as funções response e displayJSONobj para exibir o resultado da consulta aos usuários.

Listagem 5. Adicionando funções de dispositivo
    <script type="text/javascript" src="./PureJSON.js"></script>   

    <script type="text/javascript">

    var msg = new gadgets.MiniMessage(__MODULE_ID__);

    function displayJSONobj(obj)	{
      var str = "The returned record is empty, it might not exist";
      if(obj.text!=""){
      	str = obj.text;
      }
      msg.createDismissibleMessage(str);
      gadgets.window.adjustHeight();
    };

    function callGetJSONDoc()	{
      getJSONDocumentByKey(document.getElementById("key1").value);
    };

    function getJSONDocumentByKeyReturn(obj)	{
      var str = obj.text;
      msg.createDismissibleMessage(str);
      gadgets.window.adjustHeight();
    };

    function callInsertJSON()	{
      insertJSON(document.getElementById("key2").value,
         document.getElementById("document1").value);
    };

    function callUpdateJSON()	{
      updateJSON(document.getElementById("key3").value, 
         document.getElementById("document2").value);
    };
    
    function callDeleteDoc()	{
      deleteDocument(document.getElementById("key4").value);
    };
    
   function response(obj)	{
     var str = gadgets.json.parse(gadgets.util.unescapeString(obj.text));

  if(str.updateCount == 1){
    var successMsg = msg.createDismissibleMessage(
        "Received returned code = 1. Transaction successful!");
    successMsg.style.color = "green";
  }
  else	{
   var failMsg = msg.createDismissibleMessage(
    "Did not receive returned code = 1. Transaction may have failed!");
      failMsg.style.color = "red";
  }
  gadgets.window.adjustHeight();
 };

  gadgets.util.registerOnLoadHandler(gadgets.window.adjustHeight);

  </script>

Por fim, adicione a tabela HTML para capturar as ações e a entrada do usuário. A Listagem 6 mostra o código HTML. Salve a definição do dispositivo como JSONclient.xml. A captura de tela na Figura 1 é como a tabela se parece quando é renderizada.

Listagem 6. A tabela HTML
<table class="layout" cellspacing="2">
  <tr>
    <th class="green">Web Service</th>
    <th class="green" colspan="2">Input</th>
    <th class="green">Action</th>
  </tr>
  <tr class="row-bright">
    <td>getPrimaryKeys</td>
    <td colspan="2" align="center">none</td>
    <td align="center">
      <input type="submit" value="Invoke" onClick="getPrimaryKeys()"/>
    </td>
  </tr>
 <tr class="row-dark" >
  <td>getJSONDocumentByKey</td>
  <td align="right">ID:</td>
  <td align="center"><input type="text" id="key1" size="40" /></td>
  <td align="center">
   <input type="submit" value="Invoke" onClick="callGetJSONDoc()"/>
  </td>
 </tr>
 <tr class="row-bright">
   <td rowspan="2">insertJSON</td>
   <td align="right">ID:</td>
   <td align="center"><input type="text" id="key2" size="40" /></td>
   <td align="center" rowspan="2">
     <input type="submit" value="Invoke" onClick="callInsertJSON()"/>
   </td>
 </tr>
  <tr class="row-bright">
    <td align="right">Document:</td>
    <td align="center">
      <textarea id="document1" cols="30" rows="5" ></textarea>
    </td>
  </tr>
  <tr class="row-dark" >
    <td rowspan="2">updateJSON</td>
    <td align="right">ID:</td>
    <td align="center"><input type="text" id="key3" size="40" /></td>
    <td rowspan="2" align="center">
	    <input type="submit" value="Invoke" onClick="callUpdateJSON()"/>
    </td>
  </tr>
  <tr class="row-dark">
    <td align="right">Document:</td>
    <td align="center">
     <textarea id="document2" cols="30" rows="5" ></textarea>
    </td>
  </tr>
  <tr class="row-bright">
    <td>deleteDocument</td>
    <td align="right">ID:</td>
    <td align="center"><input type="text" id="key4" size="40" /></td>
    <td align="center">
      <input type="submit" value="Invoke" onClick="callDeleteDoc()"/>
    </td>
  </tr>
</table>

Implementação e teste

Você agora implementará o dispositivo e então o testará.

Implementação do dispositivo

Para testar novo aplicativo de teste Universal Services, é possível simplesmente implementar tanto PureJSON.js e JSONclient.xml para um servidor HTTP. Desde que os arquivos estejam disponíveis através de uma URL, o contêiner OpenSocial deve poder recuperar a especificação do dispositivo e renderizar o conteúdo de acordo. Um servidor OpenSocial tem diversas opções para ambos para implementação local, disponíveis através de projetos de software livre, bem como plataformas hospedadas externamente. Para simplicidade, esse dispositivo de amostra será implementado para a sandbox iGoogle, que fornece o contêiner OpenSocial.

  1. Faça login em http://www.google.com/ig/sandbox
  2. Uma vez feito o login, navegue para o link Add stuff na parte superior direita da página. Isso o levará para uma página que fornece recursos de pesquisa para dispositivos registrados existentes. Consulte a Figura 2. Observe que a URL deve estar acessível a partir da Web. Por exemplo, se estiver executando por trás de uma firewall, sua implementação pode não funcionar, porque a definição do dispositivo pode não ser carregada e processada pelo contêiner OpenSocial, neste caso, o iGoogle. ((Consulte uma versão maior da Figura 2.
    Figura 2. Adicione aplicativos à sandbox iGoogle
    Adicione aplicativos à sandbox iGoogle
  3. A seguir você adicionará esse novo dispositivo pela URL. Na navegação à esquerda, você verá um link para Add feed or gadget. Isso abrirá uma caixa de diálogo onde será preciso inserir a URL completa para JSONclient.xml. Consulte a Figura 3.
    Figura 3. Adicione um dispositivo OpenSocial à sandbox iGoogle
    Adicione um dispositivo OpenSocial à sandbox iGoogle
  4. Agora deve ser possível retornar à sua página inicial do iGoogle e ver o dispositivo recém-adicionado na sua página.

Teste do dispositivo

A Figura 4 mostra o dispositivo renderizado no iGoogle.

Figura 4. O dispositivo renderizado no iGoogle
O dispositivo renderizado no iGoogle
  1. Para editar as configurações do dispositivo, selecione o ícone triângulo para abrir a lista suspensa de opções. Selecione Edit settings.
  2. Atualize o endereço de host pureXML e o caminho-raiz de contexto para apontar para seus Universal Services.
  3. No campo getJSONDocumentByKey, insira uma chave de documento para recuperar um registro JSON, então clique em Invoke. Para testar outras transações, repita essa etapa.
  4. Minimensagem exibe o resultado. Para remover as mensagens, selecione o x no final da linha.

Conclusão

Neste artigo, fornecemos um conjunto de código de amostra que migra o aplicativo da Web tradicional para um aplicativo configurável e móvel que pode ser implementado rapidamente para diversas plataformas na Web. Embora o aplicativo em si seja simples, essa referência pode ser usada para facilmente montar e fazer protótipo de novos aplicativos. O cliente de dispositivo OpenSocial fornece aos usuários uma maneira conveniente de conectar-se dinamicamente a qualquer pureXML Universal Services através do suporte UserPrefs. Com POST makeRequest, os desenvolvedores de dispositivo podem simplesmente criar consultas conectando aos serviços para realizar suas transações de banco de dados. Consumidores de dispositivo podem adicionar o dispositivo a qualquer contêiner OpenSocial, independentemente de onde esteja fisicamente implementado e hospedado, mantendo os consumidores livres de gerenciamento de conteúdo e infraestrutura.


Downloads

DescriçãoNomeTamanho
JavaScript POST request functionsPureJSON.js.zip1KB
OpenSocial gadget definition XMLJSONclient.xml.zip2KB

Recursos

Aprender

  • Build a pureXML and JSON application, Part 1: Store and query JSON with DB2 pureXML (Nuno Job, Susan Malaika e Michael Schenke; developerWorks, outubro de 2009): Consulte o primeiro artigo dessa série e comece a se beneficiar de objetos JSON persistentes que mantêm o estado através das sessões. Armazene, gerencie e consulte o JSON com o DB2 pureXML e um simples mapeamento JSON para XML. (Parte 1 da série de três partes.)
  • Build a pureXML and JSON application, Part 2: Create Universal Services for pureXML that expose JSON (Faton (Tony) Avdiu, Susan Malaika e Michael Schenke; developerWorks, outubro de 2009): Seguindo as etapas nesse artigo, você apresentará os dados JSON descritos no primeiro artigo nesta série através do JSON Universal Services. (Parte 2 da série de três partes.)
  • OpenSocial Community : Encontre links para artigos, tutoriais e as especificações técnicas para aprender a embarcar APIs OpenSocial em uma rede social, para acessar ou compartilhar dados sociais na Web.
  • Consulte o iGoogle Sandbox Development Guide : Consulte detalhes sobre suporte OpenSocial e desenvolvimento e implementação de aplicativo nesse ambiente.
  • Apache Shindig: Explore esse contêiner OpenSocial para rapidamente hospedar aplicativos OpenSocial com código para renderizar dispositivos, solicitações de proxy e tratar solicitações REST e RPC. Essa comunidade de software livre está desenvolvendo uma implementação de referência para a especificação OpenSocial e implementando nesse ambiente.
  • Certificação IBM XML: Descubra como se tornar um Desenvolvedor Certificado pela IBM em XML e tecnologias relacionadas.
  • Biblioteca técnica de XML: Veja na developerWorks XML Zone uma grande variedade de artigos técnicos e dicas, tutoriais, padrões e Redbooks da IBM.
  • Eventos técnicos e webcasts do developerWorks: Fique atualizado sobre a tecnologia por meio dessas sessões.
  • Podcasts do developerWorks: Escute entrevistas e debates interessantes para desenvolvedores de software.

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Information Management, WebSphere
ArticleID=450998
ArticleTitle=Criação de um aplicativo JSON e pureXML, Parte 3: Crie dispositivos OpenSocial para pureXML
publish-date=11302009