Upload
marina-assuncao-cesario
View
223
Download
0
Embed Size (px)
Citation preview
Google Data API
Sandro Rama Fiorini
Introdução
Missão Google: “organizar a informação do mundo inteiro e fazê-la
universalmente acessível e útil”. Universalmente acessível
Fora do contexto do navegador
Introdução
GData API Interface básica para vários serviços
Google Incorpora
Arquitetura RESTAtomRSS
Roteiro Atom REST Google GData API
Operações Concorrência Autenticação Estado Bibliotecas Clientes Exemplo de Cliente
Atom Formato XML para publicação de informações
Proposta de padrão RFC 4287 Conceitos
Feeds Metadados Entradas (Entry)
Extensível
<feed>
(metadados do feed)
<entry> ...
</entry><entry>
...</entry>...
</feed>
<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom">
<title>Example Feed</title> <subtitle>A subtitle.</subtitle> <link href="http://example.org/"/> <updated>2003-12-13T18:30:02Z</updated> <author>
<name>John Doe</name> <email>[email protected]</email>
</author> <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id>
<entry> <title>Atom-Powered Robots Run Amok</title> <link href="http://example.org/2003/12/13/atom03"/> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <content>Some text.</content>
</entry><entry>
<title>Atom-Powered Robots Run Amok</title> <link href="http://example.org/2003/12/13/atom03"/> <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id> <updated>2003-12-13T18:30:02Z</updated> <content>Some text.</content>
</entry></feed>
Arquitetura REST
Representational State TransferTermo proposto no ano 2000, na tese de
doutorado de Roy Fielding, um dos criadores do protocolo HTTP
Modelo de arquitetura baseado em Recursos Transições de estado
Arquitetura REST: Princípios Estado e funcionalidade divididos em recursos Cada recurso é endereçado unicamente com um sintaxe universal
(como URI) Todos os recursos dividem um interface comum que consistindo
de: Um conjunto restrito de operações bem definidas Um conjunto restrito de tipos de conteúdo
Baseado em um protocolo que é Cliente servidor Stateless Cacheable Dividio em camadas
REST: Tipos RESTful
Segue todos os princípios Melhor exemplo: WWW
Recursos: paginas web Transição de estado: links Protocolo HTTP
Requisições GET, PUT, POST, e DELETE RESTafarian
Segue alguns princípios XML RPC Cookies
REST: Comparação com RPC getUser() addUser() removeUser() updateUser() getLocation() addLocation() removeLocation() updateLocation() listUsers() listLocations() findLocation() findUser()
http://example.com/users/ http://example.com/users/JohnDoe http://example.com/findUserForm http://example.com/locations/ http://example.com/locations/PortoAlegre http://example.com/findLocationForm
GET http://example.com/users/ PUT http://example.com/users/MaryJane DELETE http://example.com/users/JohnDoe
Google GData API
Arquitetura REST RESTafarian
Recursos descritos em XML Atom (padrão) e RSS Suporta extensões
Acesso via HTTP Requisições GET, PUT, POST, e DELETE Atom Publishing Protocol (APP)
GData API: GETGET /myFeed 200 OK
<?xml version="1.0"?><feed xmlns="http://www.w3.org/2005/Atom"> <title>Foo</title> <updated>2006-01-23T16:25:00-08:00</updated> <id>http://www.example.com/myFeed</id> <author> <name>Jo March</name> </author> <link href="/myFeed" rel="self"/></feed>
GData API: POSTPOST /myFeed
<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <author> <name>Elizabeth Bennet</name> <email>[email protected]</email> </author> <title type="text">Entry 1</title> <content type="text"> This is my entry </content></entry>
201 CREATED
<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <id>1</id> <link rel="edit“ href=“http://example.com/myFeed/1/1/” /> <updated>2006-01-23T16:26:03-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>[email protected]</email> </author> <title type="text">Entry 1</title> <content type="text">This is my entry</content></entry>
GData API: GET (consulta)GET /myFeed?q=This 200 OK
<?xml version="1.0"?><feed xmlns="http://www.w3.org/2005/Atom"> <title>Foo</title> <updated>2006-01-23T16:26:03-08:00</updated> <id>http://www.example.com/myFeed</id> <author> <name>Jo March</name> </author> <link href="/myFeed" rel="self"/> <entry> <id>1</id> <link rel="edit" href="http://example.com/myFeed/1/1/"/> <updated>2006-01-23T16:26:03-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>[email protected]</email> </author> <title type="text">Entry 1</title> <content type="text">This is my entry</content> </entry></feed>
GData API: PUTPUT /myFeed/1/1/
<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <id>1</id> <link rel="edit“ href="http://example.com/myFeed/1/1/“ /> <updated>2006-01-23T16:28:05-08:00</updated>
<author> <name>Elizabeth Bennet</name> <email>[email protected]</email> </author> <title type="text">Entry 1</title> <content type="text"> This is my first entry. </content></entry>
200 OK
<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"> <id>1</id>
<link rel="edit" href="http://example.com/myFeed/1/2/“ />
<updated>2006-01-23T16:28:05-08:00</updated> <author> <name>Elizabeth Bennet</name> <email>[email protected]</email> </author> <title type="text">Entry 1</title> <content type="text"> This is my first entry. </content></entry>
GData API: DELETE DELETE /myFeed/1/2/
200 OK
Exemplo: Picasa<entry xmlns='http://www.w3.org/2005/Atom' xmlns:media='http://search.yahoo.com/mrss/' xmlns:gphoto='http://schemas.google.com/photos/2007'> <title type='text'>Trip To Italy</title> <summary type='text'>This was the recent trip I took to Italy.</summary> <gphoto:location>Italy</gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> <gphoto:timestamp>1152255600000</gphoto:timestamp> <media:group> <media:keywords>italy, vacation</media:keywords> </media:group> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album'></category></entry>
GData API: Consulta
Modelo intencionalmente simples Consultas representadas como HTTP URIs Não existe maneira de relacionar itens Ordenação depende da implementeção Protocolo extensível Exemplo:
http://www.example.com/feeds/jo?q=travel+Paris&published-min=2005-04-19T15:30:00&published-max=2006-04-19T15:30:00
GData API: Concorrência
Concorrência otimista Controle de versão
Identificador Se um cliente tenta fazer uma alteração de uma
entrada que já foi alterada, o acesso é negado. Negação de atualização:
409 Conflict Seguido do atual estado da entrada
Alguns serviços não suportam esse modelo
GData API: Autenticação Para clientes desktop:
ClientLogin Aplicativo pergunta ao usuário as suas credenciais e as envia ao
Google. Google retorna um token que é utilizado nas interações
seguintes Para clientes Web:
AuthSub Semelhante ao ClientLogin O usuário informa as suas credenciais a um serviço web da
Google Não passa pelo aplicativo web Mais seguro
GData API: Estado
Manutenção de estado de duas formasVia CookiesVia Tokens
Bibliotecas Clientes
Java Phyton .NET JavaScript/AJAX
JSON no lugar de XML PHP
Java: Exemplo
Classes que correspondem as entidades e tipos de dados da API <atom:feed> com.google.gdata.data.Feed <atom:entry> com.google.gdata.data.Entry
Especializações para cada serviço com.google.gdata.data.photos.PhotoFeed
Extensível
Aplicação de Teste (1)
Blogger armazena fotos no Picasa, mas... Não permite postar fotos que já estejam
no Picasa Aplicativo Java para fazer isso
Mashup
Aplicação de Teste (2)
Conclusão
Ótima iniciativa Mashups
Abordagem pragmática Contraste com SOAP+WSDL
Documentação razoável Bibliotecas cliente
Biblioteca Java ainda precisa de um polimento