SlideShare una empresa de Scribd logo
1 de 97
YOW!
Nights
 March 2013



Kevin O’Neill
CTO PlayUp

@kevinoneill
Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Roadmap
          •       ReST and Hypermedia

          •       An example of a Hypermedia driven service

          •       Tips & Trips




Kevin O’Neill - CTO PlayUp - @kevinoneill              YOW! Nights - March 2013
A jumping off point


Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Opinionated



Kevin O’Neill - CTO PlayUp - @kevinoneill       YOW! Nights - March 2013
Real



Kevin O’Neill - CTO PlayUp - @kevinoneill          YOW! Nights - March 2013
ReST & Hypermedia



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Representational State Transfer (ReST) is a
          style of software architecture for distributed
                hypermedia systems such as the
                         World Wide Web




Kevin O’Neill - CTO PlayUp - @kevinoneill        YOW! Nights - March 2013
ReST




Kevin O’Neill - CTO PlayUp - @kevinoneill          YOW! Nights - March 2013
ReST is not a
                       meaningful term


Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
One URL ≠ ReST



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
One URL ≠ ReST


       http://example.com/system?action=getUser&uid=3

       http://example.com/system?action=mkUser&name=…

       http://example.com/system?action=rmUser&uid=3




Kevin O’Neill - CTO PlayUp - @kevinoneill    YOW! Nights - March 2013
Resources = ReST ?



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Resources = ReST ?

       http://example.com/users/3

       http://example.com/users/<uid>

       http://example.com/users/<uid>/friends




Kevin O’Neill - CTO PlayUp - @kevinoneill       YOW! Nights - March 2013
HTTP Verbs = ReST ?



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
HTTP Verbs = ReST ?

       POST	
  http://example.com/users

       GET	
  http://example.com/users/3

       PUT	
  http://example.com/users/3

       DELETE	
  http://example.com/users/3




Kevin O’Neill - CTO PlayUp - @kevinoneill     YOW! Nights - March 2013
What is ReST really?



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
"ReST is software design on the scale of
       decades: every detail is intended to promote
       software longevity and independent evolution.
       Many of the constraints are directly opposed
       to short-term efficiency. Unfortunately, people
       are fairly good at short-term design, and
       usually awful at long-term design."

                                            Roy Fielding



Kevin O’Neill - CTO PlayUp - @kevinoneill       YOW! Nights - March 2013
The constraints of
                         ReST


Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Client Server



Kevin O’Neill - CTO PlayUp - @kevinoneill       YOW! Nights - March 2013
Stateless Server



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Cacheable



Kevin O’Neill - CTO PlayUp - @kevinoneill         YOW! Nights - March 2013
Uniform Interface



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Layered System



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Code-On-Demand
                       (optional)


Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Uniform Interface



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Identification of
                            Resources


Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Manipulation of
                  resources through
                   representations

Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Self-descriptive
                           messages


Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Hypermedia as the
           engine of application
                   state

Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
“What needs to be done to make the ReST
       architectural style clear on the notion that
       hypertext is a constraint? In other words, if the
       engine of application state (and hence the
       API) is not being driven by hypertext, then it
       cannot be ReSTful and cannot be a ReST API.
       Period. Is there some broken manual
       somewhere that needs to be fixed?”

                                            Roy T. Fielding


Kevin O’Neill - CTO PlayUp - @kevinoneill          YOW! Nights - March 2013
A Hypermedia driven
                 service


Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
PlayUp Pass



Kevin O’Neill - CTO PlayUp - @kevinoneill       YOW! Nights - March 2013
Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Getting the Price
                                                                               TMS                     2 Get Tile




                                                              1 Get Section               4 Section




                                                                                                      3 Priced Tile
                                                                                7:20 PM




                                                7 Get Price

                                                                                                                      Content
                                    App
                                                                                                                      Provider
                                   Store
                                                                                                                         ($)
                                                 8$




                                            5                                             6




                                                                               Ticket
                                                                              Service




Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                        YOW! Nights - March 2013
Products
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
       	
  	
  	
  	
  "preview":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Products
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
    ":type":	
  "application/vnd.playup.ticketing.product+json"
       	
  	
  	
  	
  "preview":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Preview
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
    "preview":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
    	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
    82/preview?token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
       	
  	
  	
  	
  "preview":	
  {
    	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
    },	
  
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Preview
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
    ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  "preview":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Accept Header



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Accept Header


       Accept

       application/vnd.playup.stream.story+json,*/*




Kevin O’Neill - CTO PlayUp - @kevinoneill    YOW! Nights - March 2013
Preview
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
    ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
       	
  	
  	
  	
  "preview":	
  {
    82/preview?token={token:ticketing_sample_provider}"
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
URI Parameterization



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
URI Parameterization
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
    {token:ticketing_sample_provider}
       	
  	
  	
  	
  "preview":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
URI Parameterization
       http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token=ABBr0dVOGRdPpF%2BAqll9sJNJAICWEHK
       %2BnTngDMzBI5IiABmlstT3RjwIBGkJpUCX3lchMQF3OrGoYyiYHh8zAbc7m
       %2FhsttbKyBBa%2BiX5hSApeBi1erBw7oJH9LBmk
       %2B1pfL2zApBDxCZZpJCkT5hScK1Z2g3%2BDhqkrQJTs3PQumbbC9bXJRnENksQhs
       b
       %2BNJuFrJ47sAGQBPPXyN0hy40i3J6LcwGMUSFIaR5kIAw3%2BiYyiKgC35rmZzvM
       YGEeV%2F08YR1ih47aKct5%2Fk0CTbzR06qxi1W11fR3pSMBn3HxqgYPjjMdgsa
       %2B5PiLv102eTk7kXc4Aqz1VDN2ogqu3qDbzebxdp6OOhnoSKa3jebrV9MOH6IgBR
       KYfiujq7MNle1xV1LwUQlm3T4BagclibIqOq%2FS1psWo0oZfU1DQW5h2AX
       %2BLrvF%2BGfgFRiHvaOWBUuq5esY0yqENyjD3Yu8WGq15MTqI36oK5S6hUy
       %2F0gAlB0rFMU
       %2BSX4WbuX64yjlKVWV5wr7E3FmaxT7yr98pGq04zKrJv2tn4rpUtcRoc8LrYiK2B
       doQplYATGBCDgv68p%2FTiislPJv0%2B4hqhO5oAIv7fMa81uy
       %2F5WMcOjzmmsOgJzua0%2B%2FarXna9I3d0djqJ9fTDSQkM6icwz5u2P
       %2Btulzwq8UHEgYEFYFGUKyk
       %2BEXUgre7nttltajpLL3fRqGfrUqyI1NNM1dqGjeDN4zL0YA8KujtSoSWcA%3D
       %3D

Kevin O’Neill - CTO PlayUp - @kevinoneill                    YOW! Nights - March 2013
Offers
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
       	
  	
  	
  	
  "preview":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Offers
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
    ":href":	
  "http://april.ticket.playupdev.com/ticket?
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
    provider=ticketing_sample_provider&token={token:ticket_service}
       	
  	
  	
  	
  "preview":	
  {
    "  	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Offers
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
    	
  ":options":	
  [
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  

                                                                       Text
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
    	
  	
  	
  "POST"
       	
  	
  	
  	
  "preview":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
    	
  ]
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ],
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ]	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Offers
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
    ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
    	
  "application/vnd.playup.encrypted+json
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
    	
  	
  	
  ;embedded=
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
       	
  	
  	
  	
  "preview":	
  {
    	
  	
  	
  	
  	
  "application/vnd.playup.ticketing.product.details+json"
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
    	
  	
  	
  ;for="ticket_service""
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
    ]  	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Media Types



Kevin O’Neill - CTO PlayUp - @kevinoneill      YOW! Nights - March 2013
Media Types
                 describe a domain
                  specific protocol

Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
application/json



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Media Type Explosion



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Media Types
       ":type":	
  "application/vnd.playup.ticketing.product+json",	
  
       "product":	
  {
       	
  	
  	
  	
  "detail":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.encrypted+json",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "aes256-­‐cbc":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "data":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "iv":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "signature":	
  "	
  …	
  ",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.ticketing.product.detail+json"
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "id":	
  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",	
  
       	
  	
  	
  	
  "name":	
  "F1	
  GP	
  Insider",	
  
       	
  	
  	
  	
  "preview":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?
       token={token:ticketing_sample_provider}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  ":type":	
  "application/vnd.playup.stream.story+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "provider":	
  "ticketing_sample_provider"
       },	
  
       "offer":	
  {
       	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/ticket?
       provider=ticketing_sample_provider&token={token:ticket_service}",	
  
       	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  ]
       	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.product.details+json";for="ticket_service""
       	
  	
  	
  	
  ],	
  
       }


Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                  YOW! Nights - March 2013
Media Types


       application/vnd.playup.encrypted+json;embedded=
       "application/vnd.playup.ticketing.product.details
       +json";for="ticket_service"




Kevin O’Neill - CTO PlayUp - @kevinoneill         YOW! Nights - March 2013
Media Types


       application/vnd.playup.encrypted+json;embedded=
       "application/vnd.playup.ticketing.product.details
       +json";for="ticket_service"




Kevin O’Neill - CTO PlayUp - @kevinoneill         YOW! Nights - March 2013
Media Types


       application/vnd.playup.encrypted+json;embedded=
       "application/vnd.playup.ticketing.product.details
       +json";for="ticket_service"




Kevin O’Neill - CTO PlayUp - @kevinoneill         YOW! Nights - March 2013
Something to consider



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Format vs Type


       application/vnd.playup.stream+json




Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Format vs Type


       application/vnd.playup.stream+json




Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Format vs Type


       application/vnd.playup.stream+mp




Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Format vs Type


       application/vnd.playup.stream;format=”json”




Kevin O’Neill - CTO PlayUp - @kevinoneill    YOW! Nights - March 2013
So now we post



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Offer
       {
       	
  	
  	
  	
  ":type":	
  "application/vnd.playup.ticketing.offer+json",	
  
       	
  	
  	
  	
  "content":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  "expiration":	
  "2015-­‐03-­‐13	
  01:12:44	
  +0000",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "store-­‐product":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "product":	
  "com.playup.content.pricing.tier1",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "vendor":	
  "appstore"
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  	
  	
  	
  	
  ]
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  "verification":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "…",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "link":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
       vnd.playup.ticketing.receipt+json";for="ticket_service""
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ],	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/receipt?token={token:ticket_service}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  }
       }




Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                    YOW! Nights - March 2013
Offer
       {
       	
  	
  	
  	
  ":type":	
  "application/vnd.playup.ticketing.offer+json",	
  
       	
  	
  	
  	
  "content":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  "expiration":	
  "2015-­‐03-­‐13	
  01:12:44	
  +0000",	
  
     "content":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  "store-­‐product":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {
    	
  	
  "expiration":	
  "2015-­‐03-­‐13	
  01:12:44	
  +0000",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "product":	
  "com.playup.content.pricing.tier1",	
  
    	
  	
  "store-­‐product":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "vendor":	
  "appstore"
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }
    	
  	
  	
  	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  ]
       	
  	
  	
  	
  },	
  
    	
  	
  	
  	
  	
  	
  "product":	
  "com.playup.content.pricing.tier1",	
  
       	
  	
  	
  	
  "verification":	
  {
    	
  	
  	
  	
  	
  	
  "vendor":	
  "appstore"
       	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "…",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "link":	
  {
    	
  	
  	
  	
  }
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
    	
  	
  ]
       vnd.playup.ticketing.receipt+json";for="ticket_service""
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ],	
  
    }  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/receipt?token={token:ticket_service}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  }
       }




Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                    YOW! Nights - March 2013
Offer
       {
       	
  	
  	
  	
  ":type":	
  "application/vnd.playup.ticketing.offer+json",	
  
       	
  	
  	
  	
  "content":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  "expiration":	
  "2015-­‐03-­‐13	
  01:12:44	
  +0000",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "store-­‐product":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {
    "link":	
  {
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "product":	
  "com.playup.content.pricing.tier1",	
  
    	
  	
  ":href":	
  "http://april.ticket.playupdev.com/receipt…",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "vendor":	
  "appstore"
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }
    	
  	
  ":options":	
  [	
  "POST"	
  ],
       	
  	
  	
  	
  	
  	
  	
  	
  ]
       	
  	
  	
  	
  },	
  
    	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  "verification":	
  {
    	
  	
  	
  	
  "application/vnd.playup.encrypted+json;…"
       	
  	
  	
  	
  	
  	
  	
  	
  "key":	
  "…",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  "link":	
  {
    	
  	
  ]
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":acceptable_types":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "application/vnd.playup.encrypted+json;embedded="application/
    }  vnd.playup.ticketing.receipt+json";for="ticket_service""
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ],	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":href":	
  "http://april.ticket.playupdev.com/receipt?token={token:ticket_service}",	
  
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ":options":	
  [
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "POST"
       	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ]
       	
  	
  	
  	
  	
  	
  	
  	
  }
       	
  	
  	
  	
  }
       }




Kevin O’Neill - CTO PlayUp - @kevinoneill                                                                                    YOW! Nights - March 2013
Tips & Trips



Kevin O’Neill - CTO PlayUp - @kevinoneill        YOW! Nights - March 2013
API Versioning



Kevin O’Neill - CTO PlayUp - @kevinoneill    YOW! Nights - March 2013
Versioning


       X-­‐PlayUp-­‐API-­‐Version

       3




Kevin O’Neill - CTO PlayUp - @kevinoneill          YOW! Nights - March 2013
Don’t Do It



Kevin O’Neill - CTO PlayUp - @kevinoneill           YOW! Nights - March 2013
Server Decides


       User-­‐Agent

       PlayUp%20Pass/3.5.5233	
  CFNetwork/609.1.4	
  
       Darwin/13.0.0




Kevin O’Neill - CTO PlayUp - @kevinoneill          YOW! Nights - March 2013
Client Decides

       "link":	
  {
       	
  	
  ":representations":	
  [
       	
  	
  	
  	
  {
       	
  	
  	
  	
  	
  	
  "href":	
  "http://twinstapics.playupdev.com/photos/86/stream	
  …"	
  ,	
  
       	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.stream+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  {	
  
       	
  	
  	
  	
  	
  	
  "href":	
  "http://twinstapics.playupdev.com/photos/86/section	
  …"	
  	
  ,	
  
       	
  	
  	
  	
  	
  	
  "type":	
  "text/html"
       	
  	
  	
  	
  }
       	
  	
  ],	
  
       	
  	
  ":self":	
  "http://twinstapics.playupdev.com/photos/86/section	
  …",	
  
       	
  	
  ":type":	
  "text/html"
       },	
  




Kevin O’Neill - CTO PlayUp - @kevinoneill                                                             YOW! Nights - March 2013
Client Decides

       "link":	
  {
       	
  	
  ":representations":	
  [
       	
  	
  	
  	
  {
       	
  	
  	
  	
  	
  	
  "href":	
  "http://twinstapics.playupdev.com/photos/86/stream	
  …"	
  ,	
  
       	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.stream+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  {	
  
       	
  	
  	
  	
  	
  	
  "href":	
  "http://twinstapics.playupdev.com/photos/86/section	
  …"	
  	
  ,	
  
       	
  	
  	
  	
  	
  	
  "type":	
  "text/html"
       	
  	
  	
  	
  }
       	
  	
  ],	
  
       	
  	
  ":href":	
  "http://twinstapics.playupdev.com/photos/86/section	
  …",	
  
       	
  	
  ":type":	
  "text/html"
       },	
  




Kevin O’Neill - CTO PlayUp - @kevinoneill                                                             YOW! Nights - March 2013
Client Decides

       "link":	
  {
       	
  	
  ":representations":	
  [
       	
  	
  	
  	
  {
       	
  	
  	
  	
  	
  	
  "href":	
  "http://twinstapics.playupdev.com/photos/86/stream	
  …"	
  ,	
  
       	
  	
  	
  	
  	
  	
  "type":	
  "application/vnd.playup.stream+json"
       	
  	
  	
  	
  },	
  
       	
  	
  	
  	
  {	
  
       	
  	
  	
  	
  	
  	
  "href":	
  "http://twinstapics.playupdev.com/photos/86/section	
  …"	
  	
  ,	
  
       	
  	
  	
  	
  	
  	
  "type":	
  "text/html"
       	
  	
  	
  	
  }
       	
  	
  ],	
  
       	
  	
  ":href":	
  "http://twinstapics.playupdev.com/photos/86/section	
  …",	
  
       	
  	
  ":type":	
  "text/html"
       },	
  




Kevin O’Neill - CTO PlayUp - @kevinoneill                                                             YOW! Nights - March 2013
Client vs Server



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Document Evolution



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
The client should
          ignore what it doesn’t
               understand

Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Don’t add or remove
             mandatory fields


Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
New Media Type



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
"Realtime" Updates



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
XMPP



Kevin O’Neill - CTO PlayUp - @kevinoneill          YOW! Nights - March 2013
Polling



Kevin O’Neill - CTO PlayUp - @kevinoneill             YOW! Nights - March 2013
Leverage
                              Infrastructure


Kevin O’Neill - CTO PlayUp - @kevinoneill      YOW! Nights - March 2013
Dynamic Scaling



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Cache Headers

       ETag
       "9461cf5ecc0f4df6e880ce76479aba90"

       Cache-­‐Control
       max-­‐age=15,	
  public

       Vary
       Accept-­‐Language




Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Cache Headers

        ETag
        "9461cf5ecc0f4df6e880ce76479aba90"
    	
  	
  Cache-­‐Control
    	
  	
  max-­‐age=15,	
  public
        Cache-­‐Control
        max-­‐age=15,	
  public

       Vary
       Accept-­‐Language




Kevin O’Neill - CTO PlayUp - @kevinoneill    YOW! Nights - March 2013
Other Choices



Kevin O’Neill - CTO PlayUp - @kevinoneill    YOW! Nights - March 2013
Tools



Kevin O’Neill - CTO PlayUp - @kevinoneill           YOW! Nights - March 2013
Charles



Kevin O’Neill - CTO PlayUp - @kevinoneill             YOW! Nights - March 2013
Fiddler



Kevin O’Neill - CTO PlayUp - @kevinoneill             YOW! Nights - March 2013
Link Conditioner



Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013
Wireshark



Kevin O’Neill - CTO PlayUp - @kevinoneill          YOW! Nights - March 2013
Wireshark


       rvictl	
  -­‐s	
  <device	
  UDID>

       /def/bpf*




Kevin O’Neill - CTO PlayUp - @kevinoneill          YOW! Nights - March 2013
Questions?
       Kevin O’Neill
       CTO - PlayUp
       @kevinoneill
       kevin@playup.com




Kevin O’Neill - CTO PlayUp - @kevinoneill   YOW! Nights - March 2013

Más contenido relacionado

Destacado

Ardija plus one: what we are aiming at international networking
Ardija plus one: what we are aiming at international networkingArdija plus one: what we are aiming at international networking
Ardija plus one: what we are aiming at international networkingmiraikenkyu
 
Різноманітність рослин у природі
Різноманітність рослин у природіРізноманітність рослин у природі
Різноманітність рослин у природіКовпитська ЗОШ
 
Real Time BOM Explosions with Apache Solr and Spark
Real Time BOM Explosions with Apache Solr and SparkReal Time BOM Explosions with Apache Solr and Spark
Real Time BOM Explosions with Apache Solr and SparkQAware GmbH
 
Ruby メタプログラミングによるXMLテンプレートエンジンの実装と評価
Ruby メタプログラミングによるXMLテンプレートエンジンの実装と評価Ruby メタプログラミングによるXMLテンプレートエンジンの実装と評価
Ruby メタプログラミングによるXMLテンプレートエンジンの実装と評価R S
 
3.9.2 Coordinates and Proportions
3.9.2 Coordinates and Proportions3.9.2 Coordinates and Proportions
3.9.2 Coordinates and Proportionssmiller5
 
WSO2 Guest Webinar: Designing and Developing a University API
WSO2 Guest Webinar: Designing and Developing a University APIWSO2 Guest Webinar: Designing and Developing a University API
WSO2 Guest Webinar: Designing and Developing a University APIWSO2
 
Mapa conceptual ciclo de vida de un proyecto
Mapa conceptual ciclo de vida de un proyectoMapa conceptual ciclo de vida de un proyecto
Mapa conceptual ciclo de vida de un proyectojulio cesar
 
3.ผลการศึกษาต่อ
3.ผลการศึกษาต่อ3.ผลการศึกษาต่อ
3.ผลการศึกษาต่อWisapoy Lennon
 

Destacado (10)

Ardija plus one: what we are aiming at international networking
Ardija plus one: what we are aiming at international networkingArdija plus one: what we are aiming at international networking
Ardija plus one: what we are aiming at international networking
 
思考と協働
思考と協働思考と協働
思考と協働
 
Tips para elaborar propuesta de investigación
Tips para elaborar propuesta de investigaciónTips para elaborar propuesta de investigación
Tips para elaborar propuesta de investigación
 
Різноманітність рослин у природі
Різноманітність рослин у природіРізноманітність рослин у природі
Різноманітність рослин у природі
 
Real Time BOM Explosions with Apache Solr and Spark
Real Time BOM Explosions with Apache Solr and SparkReal Time BOM Explosions with Apache Solr and Spark
Real Time BOM Explosions with Apache Solr and Spark
 
Ruby メタプログラミングによるXMLテンプレートエンジンの実装と評価
Ruby メタプログラミングによるXMLテンプレートエンジンの実装と評価Ruby メタプログラミングによるXMLテンプレートエンジンの実装と評価
Ruby メタプログラミングによるXMLテンプレートエンジンの実装と評価
 
3.9.2 Coordinates and Proportions
3.9.2 Coordinates and Proportions3.9.2 Coordinates and Proportions
3.9.2 Coordinates and Proportions
 
WSO2 Guest Webinar: Designing and Developing a University API
WSO2 Guest Webinar: Designing and Developing a University APIWSO2 Guest Webinar: Designing and Developing a University API
WSO2 Guest Webinar: Designing and Developing a University API
 
Mapa conceptual ciclo de vida de un proyecto
Mapa conceptual ciclo de vida de un proyectoMapa conceptual ciclo de vida de un proyecto
Mapa conceptual ciclo de vida de un proyecto
 
3.ผลการศึกษาต่อ
3.ผลการศึกษาต่อ3.ผลการศึกษาต่อ
3.ผลการศึกษาต่อ
 

Similar a Building Hypermedia API's - YOW! Night - March 2013

Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)Em Campbell-Pretty
 
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)Context Matters
 
How Sumo Logic And Anki Build Highly Resilient Services On AWS To Manage Mass...
How Sumo Logic And Anki Build Highly Resilient Services On AWS To Manage Mass...How Sumo Logic And Anki Build Highly Resilient Services On AWS To Manage Mass...
How Sumo Logic And Anki Build Highly Resilient Services On AWS To Manage Mass...Christian Beedgen
 
Deploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeDeploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeTwilio Inc
 
Using BLE to Enhance User Engagement - ConnectJS
Using BLE to Enhance User Engagement - ConnectJSUsing BLE to Enhance User Engagement - ConnectJS
Using BLE to Enhance User Engagement - ConnectJSStephen Feather
 
(APP203) How Sumo Logic and Anki Build Highly Resilient Services on AWS to Ma...
(APP203) How Sumo Logic and Anki Build Highly Resilient Services on AWS to Ma...(APP203) How Sumo Logic and Anki Build Highly Resilient Services on AWS to Ma...
(APP203) How Sumo Logic and Anki Build Highly Resilient Services on AWS to Ma...Amazon Web Services
 
How Shutl Delivers Even Faster Using Neo4J
How Shutl Delivers Even Faster Using Neo4JHow Shutl Delivers Even Faster Using Neo4J
How Shutl Delivers Even Faster Using Neo4JC4Media
 
"gRPC vs REST: let the battle begin!" OSCON 2018 edition
"gRPC vs REST: let the battle begin!" OSCON 2018 edition"gRPC vs REST: let the battle begin!" OSCON 2018 edition
"gRPC vs REST: let the battle begin!" OSCON 2018 editionAlex Borysov
 
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 editionAlex Borysov
 
YUIConf 2011 keynote
YUIConf 2011 keynoteYUIConf 2011 keynote
YUIConf 2011 keynoteDav Glass
 
Dallas hw meetup_140205
Dallas hw meetup_140205Dallas hw meetup_140205
Dallas hw meetup_140205Dialexa
 
Codemotion Milan 2018 - AI with a devops mindset: experimentation, sharing an...
Codemotion Milan 2018 - AI with a devops mindset: experimentation, sharing an...Codemotion Milan 2018 - AI with a devops mindset: experimentation, sharing an...
Codemotion Milan 2018 - AI with a devops mindset: experimentation, sharing an...Thiago de Faria
 
Thiago de Faria - AI with a devops mindset - experimentation, sharing and eas...
Thiago de Faria - AI with a devops mindset - experimentation, sharing and eas...Thiago de Faria - AI with a devops mindset - experimentation, sharing and eas...
Thiago de Faria - AI with a devops mindset - experimentation, sharing and eas...Codemotion
 
Puppet and Software Delivery
Puppet and Software DeliveryPuppet and Software Delivery
Puppet and Software DeliveryJulien Pivotto
 
How To Keep Your Developers Happy, Whilst Keeping Your Job!
How To Keep Your Developers Happy, Whilst Keeping Your Job!How To Keep Your Developers Happy, Whilst Keeping Your Job!
How To Keep Your Developers Happy, Whilst Keeping Your Job!VMware Tanzu
 
Goto Berlin - Migrating to Microservices (Fast Delivery)
Goto Berlin - Migrating to Microservices (Fast Delivery)Goto Berlin - Migrating to Microservices (Fast Delivery)
Goto Berlin - Migrating to Microservices (Fast Delivery)Adrian Cockcroft
 

Similar a Building Hypermedia API's - YOW! Night - March 2013 (20)

A Slice of Scala
A Slice of Scala A Slice of Scala
A Slice of Scala
 
Deploying the Graph
Deploying the GraphDeploying the Graph
Deploying the Graph
 
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
 
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
Scaling Agile Data Warehousing with the Scaled Agile Framework (SAFe)
 
How Sumo Logic And Anki Build Highly Resilient Services On AWS To Manage Mass...
How Sumo Logic And Anki Build Highly Resilient Services On AWS To Manage Mass...How Sumo Logic And Anki Build Highly Resilient Services On AWS To Manage Mass...
How Sumo Logic And Anki Build Highly Resilient Services On AWS To Manage Mass...
 
Innovateeurope
InnovateeuropeInnovateeurope
Innovateeurope
 
Deploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero DowntimeDeploying Next Gen Systems with Zero Downtime
Deploying Next Gen Systems with Zero Downtime
 
Using BLE to Enhance User Engagement - ConnectJS
Using BLE to Enhance User Engagement - ConnectJSUsing BLE to Enhance User Engagement - ConnectJS
Using BLE to Enhance User Engagement - ConnectJS
 
(APP203) How Sumo Logic and Anki Build Highly Resilient Services on AWS to Ma...
(APP203) How Sumo Logic and Anki Build Highly Resilient Services on AWS to Ma...(APP203) How Sumo Logic and Anki Build Highly Resilient Services on AWS to Ma...
(APP203) How Sumo Logic and Anki Build Highly Resilient Services on AWS to Ma...
 
How Shutl Delivers Even Faster Using Neo4J
How Shutl Delivers Even Faster Using Neo4JHow Shutl Delivers Even Faster Using Neo4J
How Shutl Delivers Even Faster Using Neo4J
 
"gRPC vs REST: let the battle begin!" OSCON 2018 edition
"gRPC vs REST: let the battle begin!" OSCON 2018 edition"gRPC vs REST: let the battle begin!" OSCON 2018 edition
"gRPC vs REST: let the battle begin!" OSCON 2018 edition
 
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
"gRPC vs REST: let the battle begin!" GeeCON Krakow 2018 edition
 
YUIConf 2011 keynote
YUIConf 2011 keynoteYUIConf 2011 keynote
YUIConf 2011 keynote
 
Dallas hw meetup_140205
Dallas hw meetup_140205Dallas hw meetup_140205
Dallas hw meetup_140205
 
Codemotion Milan 2018 - AI with a devops mindset: experimentation, sharing an...
Codemotion Milan 2018 - AI with a devops mindset: experimentation, sharing an...Codemotion Milan 2018 - AI with a devops mindset: experimentation, sharing an...
Codemotion Milan 2018 - AI with a devops mindset: experimentation, sharing an...
 
Thiago de Faria - AI with a devops mindset - experimentation, sharing and eas...
Thiago de Faria - AI with a devops mindset - experimentation, sharing and eas...Thiago de Faria - AI with a devops mindset - experimentation, sharing and eas...
Thiago de Faria - AI with a devops mindset - experimentation, sharing and eas...
 
Puppet and Software Delivery
Puppet and Software DeliveryPuppet and Software Delivery
Puppet and Software Delivery
 
How To Keep Your Developers Happy, Whilst Keeping Your Job!
How To Keep Your Developers Happy, Whilst Keeping Your Job!How To Keep Your Developers Happy, Whilst Keeping Your Job!
How To Keep Your Developers Happy, Whilst Keeping Your Job!
 
respect-estimates.pdf
respect-estimates.pdfrespect-estimates.pdf
respect-estimates.pdf
 
Goto Berlin - Migrating to Microservices (Fast Delivery)
Goto Berlin - Migrating to Microservices (Fast Delivery)Goto Berlin - Migrating to Microservices (Fast Delivery)
Goto Berlin - Migrating to Microservices (Fast Delivery)
 

Último

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfhans926745
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 

Último (20)

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Building Hypermedia API's - YOW! Night - March 2013

  • 1. YOW! Nights March 2013 Kevin O’Neill CTO PlayUp @kevinoneill
  • 2. Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 3. Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 4. Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 5. Roadmap • ReST and Hypermedia • An example of a Hypermedia driven service • Tips & Trips Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 6. A jumping off point Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 7. Opinionated Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 8. Real Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 9. ReST & Hypermedia Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 10. Representational State Transfer (ReST) is a style of software architecture for distributed hypermedia systems such as the World Wide Web Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 11. ReST Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 12. ReST is not a meaningful term Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 13. One URL ≠ ReST Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 14. One URL ≠ ReST http://example.com/system?action=getUser&uid=3 http://example.com/system?action=mkUser&name=… http://example.com/system?action=rmUser&uid=3 Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 15. Resources = ReST ? Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 16. Resources = ReST ? http://example.com/users/3 http://example.com/users/<uid> http://example.com/users/<uid>/friends Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 17. HTTP Verbs = ReST ? Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 18. HTTP Verbs = ReST ? POST  http://example.com/users GET  http://example.com/users/3 PUT  http://example.com/users/3 DELETE  http://example.com/users/3 Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 19. What is ReST really? Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 20. "ReST is software design on the scale of decades: every detail is intended to promote software longevity and independent evolution. Many of the constraints are directly opposed to short-term efficiency. Unfortunately, people are fairly good at short-term design, and usually awful at long-term design." Roy Fielding Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 21. The constraints of ReST Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 22. Client Server Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 23. Stateless Server Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 24. Cacheable Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 25. Uniform Interface Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 26. Layered System Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 27. Code-On-Demand (optional) Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 28. Uniform Interface Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 29. Identification of Resources Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 30. Manipulation of resources through representations Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 31. Self-descriptive messages Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 32. Hypermedia as the engine of application state Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 33. “What needs to be done to make the ReST architectural style clear on the notion that hypertext is a constraint? In other words, if the engine of application state (and hence the API) is not being driven by hypertext, then it cannot be ReSTful and cannot be a ReST API. Period. Is there some broken manual somewhere that needs to be fixed?” Roy T. Fielding Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 34. A Hypermedia driven service Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 35. PlayUp Pass Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 36. Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 37. Getting the Price TMS 2 Get Tile 1 Get Section 4 Section 3 Priced Tile 7:20 PM 7 Get Price Content App Provider Store ($) 8$ 5 6 Ticket Service Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 38. Products ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",          "name":  "F1  GP  Insider",          "preview":  {                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 39. Products ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",          "name":  "F1  GP  Insider",   ":type":  "application/vnd.playup.ticketing.product+json"        "preview":  {                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 40. Preview ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",   "preview":  {                        "type":  "application/vnd.playup.ticketing.product.detail+json"                }    ":href":  "http://april.ticket-­‐provider.playupdev.com/content/        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",   82/preview?token={token:ticketing_sample_provider}",          "name":  "F1  GP  Insider",          "preview":  {    ":type":  "application/vnd.playup.stream.story+json"                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? },   token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 41. Preview ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",          "name":  "F1  GP  Insider",   ":type":  "application/vnd.playup.stream.story+json"        "preview":  {                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 42. Accept Header Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 43. Accept Header Accept application/vnd.playup.stream.story+json,*/* Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 44. Preview ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",   ":href":  "http://april.ticket-­‐provider.playupdev.com/content/        "name":  "F1  GP  Insider",          "preview":  { 82/preview?token={token:ticketing_sample_provider}"                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 45. URI Parameterization Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 46. URI Parameterization ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",          "name":  "F1  GP  Insider",   {token:ticketing_sample_provider}        "preview":  {                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 47. URI Parameterization http://april.ticket-­‐provider.playupdev.com/content/82/preview? token=ABBr0dVOGRdPpF%2BAqll9sJNJAICWEHK %2BnTngDMzBI5IiABmlstT3RjwIBGkJpUCX3lchMQF3OrGoYyiYHh8zAbc7m %2FhsttbKyBBa%2BiX5hSApeBi1erBw7oJH9LBmk %2B1pfL2zApBDxCZZpJCkT5hScK1Z2g3%2BDhqkrQJTs3PQumbbC9bXJRnENksQhs b %2BNJuFrJ47sAGQBPPXyN0hy40i3J6LcwGMUSFIaR5kIAw3%2BiYyiKgC35rmZzvM YGEeV%2F08YR1ih47aKct5%2Fk0CTbzR06qxi1W11fR3pSMBn3HxqgYPjjMdgsa %2B5PiLv102eTk7kXc4Aqz1VDN2ogqu3qDbzebxdp6OOhnoSKa3jebrV9MOH6IgBR KYfiujq7MNle1xV1LwUQlm3T4BagclibIqOq%2FS1psWo0oZfU1DQW5h2AX %2BLrvF%2BGfgFRiHvaOWBUuq5esY0yqENyjD3Yu8WGq15MTqI36oK5S6hUy %2F0gAlB0rFMU %2BSX4WbuX64yjlKVWV5wr7E3FmaxT7yr98pGq04zKrJv2tn4rpUtcRoc8LrYiK2B doQplYATGBCDgv68p%2FTiislPJv0%2B4hqhO5oAIv7fMa81uy %2F5WMcOjzmmsOgJzua0%2B%2FarXna9I3d0djqJ9fTDSQkM6icwz5u2P %2Btulzwq8UHEgYEFYFGUKyk %2BEXUgre7nttltajpLL3fRqGfrUqyI1NNM1dqGjeDN4zL0YA8KujtSoSWcA%3D %3D Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 48. Offers ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",          "name":  "F1  GP  Insider",          "preview":  {                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 49. Offers ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },   ":href":  "http://april.ticket.playupdev.com/ticket?        "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",          "name":  "F1  GP  Insider",   provider=ticketing_sample_provider&token={token:ticket_service}        "preview":  { "                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 50. Offers ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },    ":options":  [        "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",   Text        "name":  "F1  GP  Insider",        "POST"        "preview":  {                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?  ] token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ],        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ]   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 51. Offers ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",   ":acceptable_types":  [                        "type":  "application/vnd.playup.ticketing.product.detail+json"                }  "application/vnd.playup.encrypted+json        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",        ;embedded=        "name":  "F1  GP  Insider",          "preview":  {          "application/vnd.playup.ticketing.product.details+json"                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview?      ;for="ticket_service"" token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json" ]        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 52. Media Types Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 53. Media Types describe a domain specific protocol Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 54. application/json Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 55. Media Type Explosion Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 56. Media Types ":type":  "application/vnd.playup.ticketing.product+json",   "product":  {        "detail":  {                ":type":  "application/vnd.playup.encrypted+json",                  "aes256-­‐cbc":  {                        "data":  "  …  ",                          "iv":  "  …  ",                          "key":  "  …  ",                          "signature":  "  …  ",                          "type":  "application/vnd.playup.ticketing.product.detail+json"                }        },          "id":  "82699e9b-­‐b147-­‐46b4-­‐a90c-­‐24316071b6e9",          "name":  "F1  GP  Insider",          "preview":  {                ":href":  "http://april.ticket-­‐provider.playupdev.com/content/82/preview? token={token:ticketing_sample_provider}",                  ":type":  "application/vnd.playup.stream.story+json"        },          "provider":  "ticketing_sample_provider" },   "offer":  {        ":href":  "http://april.ticket.playupdev.com/ticket? provider=ticketing_sample_provider&token={token:ticket_service}",          ":options":  [                "POST"        ]        ":acceptable_types":  [                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.product.details+json";for="ticket_service""        ],   } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 57. Media Types application/vnd.playup.encrypted+json;embedded= "application/vnd.playup.ticketing.product.details +json";for="ticket_service" Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 58. Media Types application/vnd.playup.encrypted+json;embedded= "application/vnd.playup.ticketing.product.details +json";for="ticket_service" Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 59. Media Types application/vnd.playup.encrypted+json;embedded= "application/vnd.playup.ticketing.product.details +json";for="ticket_service" Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 60. Something to consider Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 61. Format vs Type application/vnd.playup.stream+json Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 62. Format vs Type application/vnd.playup.stream+json Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 63. Format vs Type application/vnd.playup.stream+mp Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 64. Format vs Type application/vnd.playup.stream;format=”json” Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 65. So now we post Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 66. Offer {        ":type":  "application/vnd.playup.ticketing.offer+json",          "content":  {                "expiration":  "2015-­‐03-­‐13  01:12:44  +0000",                  "store-­‐product":  [                        {                                "product":  "com.playup.content.pricing.tier1",                                  "vendor":  "appstore"                        }                ]        },          "verification":  {                "key":  "…",                  "link":  {                        ":acceptable_types":  [                                "application/vnd.playup.encrypted+json;embedded="application/ vnd.playup.ticketing.receipt+json";for="ticket_service""                        ],                          ":href":  "http://april.ticket.playupdev.com/receipt?token={token:ticket_service}",                          ":options":  [                                "POST"                        ]                }        } } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 67. Offer {        ":type":  "application/vnd.playup.ticketing.offer+json",          "content":  {                "expiration":  "2015-­‐03-­‐13  01:12:44  +0000",   "content":  {                "store-­‐product":  [                        {    "expiration":  "2015-­‐03-­‐13  01:12:44  +0000",                                  "product":  "com.playup.content.pricing.tier1",      "store-­‐product":  [                                "vendor":  "appstore"                        }        {                ]        },              "product":  "com.playup.content.pricing.tier1",          "verification":  {            "vendor":  "appstore"                "key":  "…",                  "link":  {        }                        ":acceptable_types":  [                                "application/vnd.playup.encrypted+json;embedded="application/    ] vnd.playup.ticketing.receipt+json";for="ticket_service""                        ],   }                        ":href":  "http://april.ticket.playupdev.com/receipt?token={token:ticket_service}",                          ":options":  [                                "POST"                        ]                }        } } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 68. Offer {        ":type":  "application/vnd.playup.ticketing.offer+json",          "content":  {                "expiration":  "2015-­‐03-­‐13  01:12:44  +0000",                  "store-­‐product":  [                        { "link":  {                                "product":  "com.playup.content.pricing.tier1",      ":href":  "http://april.ticket.playupdev.com/receipt…",                                  "vendor":  "appstore"                        }    ":options":  [  "POST"  ],                ]        },      ":acceptable_types":  [        "verification":  {        "application/vnd.playup.encrypted+json;…"                "key":  "…",                  "link":  {    ]                        ":acceptable_types":  [                                "application/vnd.playup.encrypted+json;embedded="application/ } vnd.playup.ticketing.receipt+json";for="ticket_service""                        ],                          ":href":  "http://april.ticket.playupdev.com/receipt?token={token:ticket_service}",                          ":options":  [                                "POST"                        ]                }        } } Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 69. Tips & Trips Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 70. API Versioning Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 71. Versioning X-­‐PlayUp-­‐API-­‐Version 3 Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 72. Don’t Do It Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 73. Server Decides User-­‐Agent PlayUp%20Pass/3.5.5233  CFNetwork/609.1.4   Darwin/13.0.0 Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 74. Client Decides "link":  {    ":representations":  [        {            "href":  "http://twinstapics.playupdev.com/photos/86/stream  …"  ,              "type":  "application/vnd.playup.stream+json"        },          {              "href":  "http://twinstapics.playupdev.com/photos/86/section  …"    ,              "type":  "text/html"        }    ],      ":self":  "http://twinstapics.playupdev.com/photos/86/section  …",      ":type":  "text/html" },   Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 75. Client Decides "link":  {    ":representations":  [        {            "href":  "http://twinstapics.playupdev.com/photos/86/stream  …"  ,              "type":  "application/vnd.playup.stream+json"        },          {              "href":  "http://twinstapics.playupdev.com/photos/86/section  …"    ,              "type":  "text/html"        }    ],      ":href":  "http://twinstapics.playupdev.com/photos/86/section  …",      ":type":  "text/html" },   Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 76. Client Decides "link":  {    ":representations":  [        {            "href":  "http://twinstapics.playupdev.com/photos/86/stream  …"  ,              "type":  "application/vnd.playup.stream+json"        },          {              "href":  "http://twinstapics.playupdev.com/photos/86/section  …"    ,              "type":  "text/html"        }    ],      ":href":  "http://twinstapics.playupdev.com/photos/86/section  …",      ":type":  "text/html" },   Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 77. Client vs Server Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 78. Document Evolution Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 79. The client should ignore what it doesn’t understand Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 80. Don’t add or remove mandatory fields Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 81. New Media Type Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 82. "Realtime" Updates Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 83. Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 84. XMPP Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 85. Polling Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 86. Leverage Infrastructure Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 87. Dynamic Scaling Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 88. Cache Headers ETag "9461cf5ecc0f4df6e880ce76479aba90" Cache-­‐Control max-­‐age=15,  public Vary Accept-­‐Language Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 89. Cache Headers ETag "9461cf5ecc0f4df6e880ce76479aba90"    Cache-­‐Control    max-­‐age=15,  public Cache-­‐Control max-­‐age=15,  public Vary Accept-­‐Language Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 90. Other Choices Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 91. Tools Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 92. Charles Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 93. Fiddler Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 94. Link Conditioner Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 95. Wireshark Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 96. Wireshark rvictl  -­‐s  <device  UDID> /def/bpf* Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013
  • 97. Questions? Kevin O’Neill CTO - PlayUp @kevinoneill kevin@playup.com Kevin O’Neill - CTO PlayUp - @kevinoneill YOW! Nights - March 2013