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 AtomPub JSON RSS
REST “Representational state transfer”
REST Simple Lightweight Scalable Maps well to representing and exposing data
REST 1. Client sends a request to server 2. Server process the request 3. Server returns a response
AtomPub “Atom Publishing Protocol” (RFC 5023)
AtomPub Originally created for blogs Feed based Feeds are found at a specific URI An Atom Reader looks for entries in a feed
AtomPub Create Retrieve Update Delete
AtomPub Create – PUT Retrieve – GET Update – GET, modify feed, PUT Delete – DELETE
Calendar Atom Feed Google Calendar T10:46:25.244Z Coach's's personal settings 1 Coach T10:46:25.245Z
Calendar Atom Feed Google Calendar T10:46:25.244Z Coach's's personal settings 1 Coach T10:46:25.245Z
Calendar Atom Feed Google Calendar T10:46:25.244Z Coach's's personal settings 1 Coach T10:46:25.245Z
Calendar Atom Feed Google Calendar T10:46:25.244Z Coach's's personal settings 1 Coach T10:46:25.245Z
Calendar Atom Feed Google Calendar T10:46:25.244Z Coach's's personal settings 1 Coach T10:46:25.245Z
Calendar Atom Feed Google Calendar T10:46:25.244Z Coach's's personal settings 1 Coach T10:46:25.245Z
Calendar Atom Feed Google Calendar T10:46:25.244Z Coach's's personal settings 1 Coach T10:46:25.245Z
JSON “ JavaScript Object notation”
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.
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": " "}, { "type": "fax", "number": " " } ], "newSubscription": false, "companyName": null
JSON vs. XML nd Street New York NY false
GData
Additional Features Authentication Queries Concurrency Common Elements Batch Processing
Authentication ClientLogin – Desktop applications – Uses text input in application "mypassword"); AuthSub – 3 rd party websites – Directs you to Google’s website.
Query Add query to the URL Basic: Events before February 11 th 2010, ordered by date ?start-max= &orderby=starttime
Query Use the API to build queries CalendarQuery myQuery = new CalendarQuery(feedUrl); myQuery.setMinimumStartTime(DateTime.parseDateTime(" T00:00:00")); myQuery.setMaximumStartTime(DateTime.parseDateTime(" T23:59:59"));... CalendarEventFeed resultFeed = myService.query(myQuery, Feed.class);
Additional Features Authentication Queries Concurrency Common Elements Batch Processing
Additional Features Authentication Queries Concurrency Common Elements – “Kines” Batch Processing
Additional Features Authentication Queries Concurrency Common Elements Batch Processing
APIs
Libraries Java.NET PHP Python JavaScript Obj-C
API Library
Links
Example public class CalendarTest { public static void main(String[] args) { CalendarService myService = new CalendarService("exampleCo-exampleApp-1.0"); "pa$$word"); URL feedUrl = new URL(" CalendarFeed resultFeed = myService.getFeed(feedUrl, CalendarFeed.class); System.out.println("Your calendars:"); System.out.println(); for (int i = 0; i < resultFeed.getEntries().size(); i++) { CalendarEntry entry = resultFeed.getEntries().get(i); System.out.println("\t" + entry.getTitle().getPlainText()); }
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
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
REST Architectural Style Architecture of the web HTTP (protocol) Request Response. Client requests from server, and server responds.
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.
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.
Benefits Efficiency – Caches Scalability – Large set of origin servers Performance to user – Partial rendering of html and such.
Calendar Feed <feed xmlns=" xmlns:openSearch=" xmlns:gCal=" xmlns:gd=" gd:etag="W/"Ck8FQ3Y4cCp7I2A9WxVVEkU.""> T10:46:25.244Z Coach's's personal settings Coach Google Calendar T10:46:25.245Z T10:46:25.245Z
Calendar Feed <feed xmlns=" xmlns:openSearch=" xmlns:gCal=" xmlns:gd=" gd:etag="W/"Ck8FQ3Y4cCp7I2A9WxVVEkU.""> T10:46:25.244Z Coach's's personal settings Coach Google Calendar T10:46:25.245Z T10:46:25.245Z
Calendar Feed <feed xmlns=" xmlns:openSearch=" xmlns:gCal=" xmlns:gd=" gd:etag="W/"Ck8FQ3Y4cCp7I2A9WxVVEkU.""> T10:46:25.244Z Coach's's personal settings Coach Google Calendar T10:46:25.245Z T10:46:25.245Z
Calendar Feed T10:46:25.245Z
Atom Feeds Example Feed A subtitle. urn:uuid:60a76c80-d399-11d9-b91C e0af T18:30:02Z John Doe Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text.
Atom Feeds Example Feed A subtitle. urn:uuid:60a76c80-d399-11d9-b91C e0af T18:30:02Z John Doe Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text.
Atom Feeds Example Feed A subtitle. urn:uuid:60a76c80-d399-11d9-b91C e0af T18:30:02Z John Doe Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text.
Atom Feeds Example Feed A subtitle. urn:uuid:60a76c80-d399-11d9-b91C e0af T18:30:02Z John Doe Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text.
Atom Feeds Example Feed A subtitle. urn:uuid:60a76c80-d399-11d9-b91C e0af T18:30:02Z John Doe Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text.
Atom Feeds Example Feed A subtitle. urn:uuid:60a76c80-d399-11d9-b91C e0af T18:30:02Z John Doe Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text.
Atom Feeds Example Feed A subtitle. urn:uuid:60a76c80-d399-11d9-b91C e0af T18:30:02Z John Doe Atom-Powered Robots Run Amok urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a T18:30:02Z Some text.