1 / 53

Google Data Protocol

Google Data Protocol. Guy Mark Lifshitz. Motivation. Google’s Mission: Organize the world’s information Make information universally accessible Provide tools to access your information Avoid limitations on contexts: Not limited to Google Not limited to browsers. Foundation. REST

lena
Télécharger la présentation

Google Data Protocol

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Google Data Protocol Guy Mark Lifshitz

  2. Motivation • Google’s Mission: • Organize the world’s information • Make information universally accessible • Provide tools to access your information • Avoid limitations on contexts: • Not limited to Google • Not limited to browsers

  3. Foundation REST AtomPub JSON RSS

  4. REST “Representational state transfer”

  5. REST Simple Lightweight Scalable Maps well to representing and exposing data

  6. REST 1. Client sends a request to server 2. Server process the request 3. Server returns a response

  7. AtomPub“Atom Publishing Protocol” (RFC 5023)

  8. AtomPub Originally created for blogs Feed based Feeds are found at a specific URI An Atom Reader looks for entries in a feed

  9. AtomPub • Create • Retrieve • Update • Delete

  10. AtomPub • Create • PUT • Retrieve • GET • Update • GET, modify feed, PUT • Delete • DELETE

  11. Calendar Atom Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" ... > <id>http://www.google.com/calendar/feeds/default/settings</id> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml ... > <generator uri="http://www.google.com/calendar">Google Calendar</generator> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <openSearch:startIndex>1</openSearch:startIndex> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <entry> <id>http://www.google.com/calendar/feeds/default/settings/...</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google...” > <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> </feed>

  12. Calendar Atom Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" ... > <id>http://www.google.com/calendar/feeds/default/settings</id> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml ... > <generator uri="http://www.google.com/calendar">Google Calendar</generator> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <openSearch:startIndex>1</openSearch:startIndex> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <entry> <id>http://www.google.com/calendar/feeds/default/settings/...</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google...” > <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> </feed>

  13. Calendar Atom Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" ... > <id>http://www.google.com/calendar/feeds/default/settings</id> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml ... > <generator uri="http://www.google.com/calendar">Google Calendar</generator> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <openSearch:startIndex>1</openSearch:startIndex> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <entry> <id>http://www.google.com/calendar/feeds/default/settings/...</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google...” > <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> </feed>

  14. Calendar Atom Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" ... > <id>http://www.google.com/calendar/feeds/default/settings</id> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml ... > <generator uri="http://www.google.com/calendar">Google Calendar</generator> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <openSearch:startIndex>1</openSearch:startIndex> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <entry> <id>http://www.google.com/calendar/feeds/default/settings/...</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google...” > <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> </feed>

  15. Calendar Atom Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" ... > <id>http://www.google.com/calendar/feeds/default/settings</id> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml ... > <generator uri="http://www.google.com/calendar">Google Calendar</generator> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <openSearch:startIndex>1</openSearch:startIndex> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <entry> <id>http://www.google.com/calendar/feeds/default/settings/...</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google...” > <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> </feed>

  16. Calendar Atom Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" ... > <id>http://www.google.com/calendar/feeds/default/settings</id> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml ... > <generator uri="http://www.google.com/calendar">Google Calendar</generator> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <openSearch:startIndex>1</openSearch:startIndex> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <entry> <id>http://www.google.com/calendar/feeds/default/settings/...</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google...” > <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> </feed>

  17. Calendar Atom Feed <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom" ... > <id>http://www.google.com/calendar/feeds/default/settings</id> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml ... > <generator uri="http://www.google.com/calendar">Google Calendar</generator> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <openSearch:startIndex>1</openSearch:startIndex> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <entry> <id>http://www.google.com/calendar/feeds/default/settings/...</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google...” > <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> </feed>

  18. JSON“JavaScript Object notation”

  19. JSON • Properties • Lightweight data interchange format • Widespread use among web developers • Easy to read and write • Can parse JSON using any language • JSON structures map directly to data structures used in most programming languages • Within the Google Data Protocol, JSON objects simply mirror the Atom representation.

  20. JSON vs. XML "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021“ }, "phoneNumbers": [ { "type": "home“, "number": "212 555-1234"}, { "type": "fax", "number": "646 555-4567" } ], "newSubscription": false, "companyName": null

  21. JSON vs. XML <Person firstName="John" lastName="Smith"> <age>25</age> <address> <streetAddress>21 2nd Street</streetAddress> <city>New York</city> <state>NY</state> <postalCode>10021</postalCode> </address> <phoneNumber type="home">555 1234</phoneNumber> <phoneNumber type="fax">646 555-4567</phoneNumber> <newSubscription>false</newSubscription> <companyName /> </Person>

  22. GData

  23. Additional Features Authentication Queries Concurrency Common Elements Batch Processing

  24. Authentication • ClientLogin • Desktop applications • Uses text input in application myService.setUserCredentials("jo@gmail.com", "mypassword"); • AuthSub • 3rd party websites • Directs you to Google’s website.

  25. Query • Add query to the URL • Basic: http://www.google.com/calendar/feeds/default/private/full • Events before February 11th 2010, ordered by date http://www.google.com/calendar/feeds/default/private/full ?start-max=2010-02-11&orderby=starttime

  26. Query Use the API to build queries CalendarQuery myQuery = new CalendarQuery(feedUrl); myQuery.setMinimumStartTime(DateTime.parseDateTime("2006-03-16T00:00:00")); myQuery.setMaximumStartTime(DateTime.parseDateTime("2006-03-24T23:59:59")); ... CalendarEventFeed resultFeed = myService.query(myQuery, Feed.class);

  27. Additional Features Authentication Queries Concurrency Common Elements Batch Processing

  28. Additional Features • Authentication • Queries • Concurrency • Common Elements • “Kines” • Batch Processing

  29. Additional Features Authentication Queries Concurrency Common Elements Batch Processing

  30. APIs

  31. Libraries Java .NET PHP Python JavaScript Obj-C

  32. API Library

  33. Links http://code.google.com/apis/gdata/

  34. Example public class CalendarTest { public static void main(String[] args) { CalendarService myService = new CalendarService("exampleCo-exampleApp-1.0"); myService.setUserCredentials("root@gmail.com", "pa$$word"); URL feedUrl = new URL("http://www.google.com/calendar/feeds/default/allcalendars/full"); CalendarFeedresultFeed = myService.getFeed(feedUrl, CalendarFeed.class); System.out.println("Your calendars:"); System.out.println(); for (inti = 0; i < resultFeed.getEntries().size(); i++) { CalendarEntry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); } } }

  35. Request • GET PUT DELETEE HEAD POST • All Methods • POST not safe or idempotent • Intermediaries can be added in between • Proxies and Gateways • Can add performance

  36. Protocol • Client Server • Stateless • Requests are independent (don’t know what other interactions are doing) • Layered • HTTP intermdiaries can be added without changing behaviour • Cacheable

  37. REST Architectural Style Architecture of the web HTTP (protocol) Request Response. Client requests from server, and server responds.

  38. Extends Atom 1.0 RSS 2.0 Atom Publishing Protocol (APP). Google Data protocol extends those standards in various ways, using the extension mechanisms built into the standards. Feeds conform to either the Atom or RSS syndication formats. The publishing model conforms to the Atom Publishing Protocol.

  39. AtomPub “Atom Publishing Protocol” (RFC 5023) Web syndication is an effective and popular method for providing and aggregating content. It also lets you send data to Google and update data that Google maintains.

  40. Benefits • Efficiency • Caches • Scalability • Large set of origin servers • Performance to user • Partial rendering of html and such.

  41. Calendar Feed <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gCal="http://schemas.google.com/gCal/2005" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;Ck8FQ3Y4cCp7I2A9WxVVEkU.&quot;"> <id>http://www.google.com/calendar/feeds/default/settings</id> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings"/> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings"/> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <generator version="1.0" uri="http://www.google.com/calendar">Google Calendar</generator> <openSearch:startIndex>1</openSearch:startIndex> <entry> <id>http://www.google.com/calendar/feeds/default/settings/alternateCalendar</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings/alternateCalendar"/> <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> <entry> <id>http://www.google.com/calendar/feeds/default/settings/country</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings/country"/> <gCal:settingsProperty name="country" value="EH"/> </entry> </feed>

  42. Calendar Feed <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gCal="http://schemas.google.com/gCal/2005" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;Ck8FQ3Y4cCp7I2A9WxVVEkU.&quot;"> <id>http://www.google.com/calendar/feeds/default/settings</id> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings"/> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings"/> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <generator version="1.0" uri="http://www.google.com/calendar">Google Calendar</generator> <openSearch:startIndex>1</openSearch:startIndex> <entry> <id>http://www.google.com/calendar/feeds/default/settings/alternateCalendar</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings/alternateCalendar"/> <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> <entry> <id>http://www.google.com/calendar/feeds/default/settings/country</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings/country"/> <gCal:settingsProperty name="country" value="EH"/> </entry> </feed>

  43. Calendar Feed <feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gCal="http://schemas.google.com/gCal/2005" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;Ck8FQ3Y4cCp7I2A9WxVVEkU.&quot;"> <id>http://www.google.com/calendar/feeds/default/settings</id> <updated>2009-03-05T10:46:25.244Z</updated> <title type="text">Coach's's personal settings</title> <link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings"/> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings"/> <author> <name>Coach</name> <email>user@gmail.com</email> </author> <generator version="1.0" uri="http://www.google.com/calendar">Google Calendar</generator> <openSearch:startIndex>1</openSearch:startIndex> <entry> <id>http://www.google.com/calendar/feeds/default/settings/alternateCalendar</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings/alternateCalendar"/> <gCal:settingsProperty name="alternateCalendar" value="0"/> </entry> <entry> <id>http://www.google.com/calendar/feeds/default/settings/country</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings/country"/> <gCal:settingsProperty name="country" value="EH"/> </entry> </feed>

  44. Calendar Feed <entry> <id>http://www.google.com/calendar/feeds/default/settings/alternateCalendar</id> <updated>2009-03-05T10:46:25.245Z</updated> <link rel="self" type="application/atom+xml" href="http://www.google.com/calendar/feeds/default/settings/alternateCalendar"/> <gCal:settingsProperty name="alternateCalendar” value="0"/> </entry>

  45. Atom Feeds <?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/feed/" rel="self" /> <link href="http://example.org/" /> <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id> <updated>2003-1213T18:30:02Z</updated> <author> <name>John Doe</name> <email>johndoe@example.com</email> </author> <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> <summary>Some text.</summary> </entry> </feed>

  46. Atom Feeds <?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/feed/" rel="self" /> <link href="http://example.org/" /> <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id> <updated>2003-1213T18:30:02Z</updated> <author> <name>John Doe</name> <email>johndoe@example.com</email> </author> <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> <summary>Some text.</summary> </entry> </feed>

  47. Atom Feeds <?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/feed/" rel="self" /> <link href="http://example.org/" /> <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id> <updated>2003-1213T18:30:02Z</updated> <author> <name>John Doe</name> <email>johndoe@example.com</email> </author> <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> <summary>Some text.</summary> </entry> </feed>

  48. Atom Feeds <?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/feed/" rel="self" /> <link href="http://example.org/" /> <id>urn:uuid:60a76c80-d399-11d9-b91C-0003939e0af6</id> <updated>2003-1213T18:30:02Z</updated> <author> <name>John Doe</name> <email>johndoe@example.com</email> </author> <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> <summary>Some text.</summary> </entry> </feed>

More Related