ݺߣ

ݺߣShare a Scribd company logo
Rest in Practice:
   Hypermedia and Services
                          Guilherme Silveira




Wednesday, June 8, 2011
Guilherme Silveira




Wednesday, June 8, 2011
@guilhermecaelum

                          guilherme.silveira@caelum.com.br




Wednesday, June 8, 2011
11 years, 1992: “Basic”




Wednesday, June 8, 2011
2002 guj.com.br
                           2003 vraptor




Wednesday, June 8, 2011
2004 extreme programming
                             2006 scrum
                                 ...



Wednesday, June 8, 2011
2009 restfulie




                          http://restfulie.caelumobjects.com/

Wednesday, June 8, 2011
2010 tectura




                          http://www.tectura.com.br




Wednesday, June 8, 2011
2004 caelum - daily life




                              www.caelum.com.br



Wednesday, June 8, 2011
blogs


                              blog.caelum.com.br
                          agilenomundoreal.com.br
                           blog.caelumobjects.com




Wednesday, June 8, 2011
bank.com




Wednesday, June 8, 2011
bank.com                  calendar.com




Wednesday, June 8, 2011
bank.com                  calendar.com




 travel.com
Wednesday, June 8, 2011
bank.com                  calendar.com




 travel.com company.com
Wednesday, June 8, 2011
bank.com                  calendar.com




 travel.com company.com
Wednesday, June 8, 2011
what is the future
                           of integration
                           over the web?

Wednesday, June 8, 2011
what was REST?


Wednesday, June 8, 2011
Restful Web


                              Services




Wednesday, June 8, 2011
Restful Web

       create a saas account

                               Services




Wednesday, June 8, 2011
Restful Web

       create a saas account


                     freeze account
                                      Services




Wednesday, June 8, 2011
Restful Web

       create a saas account


                     freeze account
                                      Services

              reactivate account




Wednesday, June 8, 2011
Web




              Restful           Services
Wednesday, June 8, 2011
Web
                          http




              Restful            Services
Wednesday, June 8, 2011
Web
                           http

                          port 80




              Restful               Services
Wednesday, June 8, 2011
Web
                               http

                             port 80


                          firewall heaven


              Restful                  Services
Wednesday, June 8, 2011
Web Services


            Restful




Wednesday, June 8, 2011
Web Services

                             xml, json
            Restful




Wednesday, June 8, 2011
Web Services

                             xml, json
            Restful
                            get, post, ...




Wednesday, June 8, 2011
unresttrips.com: flight details



     <?xml version="1.0" encoding="UTF-8" standalum="yes"?>
     <flight>
       <information>
         <from>sao paulo</from>
         <to>seoul</to>
       </information>
       <value>900.00</value>
     </flight>




Wednesday, June 8, 2011
service locator when integrating:
                                        coupling++

                                           unrest
                                            pay


                                   unresttrips.com

                     guilherme




Wednesday, June 8, 2011
service locator when integrating:
                                        coupling++

                                           unrest
                                            pay


                                   unresttrips.com

                     guilherme




Wednesday, June 8, 2011
resttrips.com: flight details



     <?xml version="1.0" encoding="UTF-8" standalum="yes"?>
     <flight>
       <information>
         <from>sao paulo</from>
         <to>seoul</to>
       </information>
       <value>900.00</value>
       <link rel="payment"
                   href="http://resttrips.com/payment/custom"/
     </flight>



Wednesday, June 8, 2011
resttrips.com: making the payment




       flight = Client.at('http://resttrips.com/f/574XR4').get();

       confirmation = flight.getLink("payment").
                         patch(cardInformation, value);




Wednesday, June 8, 2011
resttrips.com: changing its payment provider


     <?xml version="1.0" encoding="UTF-8" standalum="yes"?>
     <flight>
       <information>
         <from>sao paulo</from>
         <to>seoul</to>
       </information>
       <value>900.00</value>
       <link rel="payment"
                   href="http://paysite.com/custom"/>
     </flight>




Wednesday, June 8, 2011
dependency injection when integrating:

                                        coupling--

                                         restrips
                                           pay

                                   resttrips.com


                     guilherme




                                         paysite.com


Wednesday, June 8, 2011
dependency injection when integrating:

                                        coupling--

                                         restrips
                                           pay

                                   resttrips.com


                     guilherme




                                         paysite.com


Wednesday, June 8, 2011
i never travel alone



Wednesday, June 8, 2011
my friend
                           sergio




Wednesday, June 8, 2011
resttrips.com: sharing a trip


           flight = Client.at('http://resttrips.com/f/574XR4').get();

           confirmation = flight.getLink("payment").
                             patch(cardInformation, value/2);

           // send the payment link to another part of the web

           flight = Client.at('http://resttrips.com/f/574XR4').get();

           confirmation = flight.getLink("payment").
                             patch(cardInformation, value/2);




Wednesday, June 8, 2011
resttrips.com: sharing a trip


           flight = Client.at('http://resttrips.com/f/574XR4').get();

           confirmation = flight.getLink("payment").
                             patch(cardInformation, value/2);

           // send the payment link to another part of the web

           flight = Client.at('http://resttrips.com/f/574XR4').get();

           confirmation = flight.getLink("payment").
                             patch(cardInformation, value/2);




Wednesday, June 8, 2011
resttrips.com: sharing a trip


           flight = Client.at('http://resttrips.com/f/574XR4').get();

           confirmation = flight.getLink("payment").
                             patch(cardInformation, value/2);

           // send the payment link to another part of the web

           flight = Client.at('http://resttrips.com/f/574XR4').get();

           confirmation = flight.getLink("payment").
                             patch(cardInformation, value/2);




Wednesday, June 8, 2011
calendar: integrating my systems


             myself = Client.at('http://users.calendar.com')
                                             .with(auth).get();

             myself.link("calendar").patch(flight.link("self"));




Wednesday, June 8, 2011
calendar: integrating my systems


             myself = Client.at('http://users.calendar.com')
                                             .with(auth).get();

             myself.link("calendar").patch(flight.link("self"));




Wednesday, June 8, 2011
calendar: more examples



      me.link("calendar").patch(link_to_birthday_list)
      me.link("calendar").patch(link_to_hotel_reservation)
      me.link("calendar").patch(link_to_trip_details)




Wednesday, June 8, 2011
so what?




Wednesday, June 8, 2011
Any update on the flight ==> reflects here
                          Any update on the hotel ==> reflects here
                          Any update on the meeting ==> reflects here




                                                   so what?




Wednesday, June 8, 2011
Any update on the flight ==> reflects here
                          Any update on the hotel ==> reflects here
                          Any update on the meeting ==> reflects here




                                                        at e!
                                                  te gr
                                                e, in
                                           st us      so what?
                                  ’t   j u
                              don



Wednesday, June 8, 2011
so what? that was just keeping an URI.




Wednesday, June 8, 2011
so what? that was just keeping an URI.




                          Remove ==> Cancels the flight
                          Remove ==> Cancels the reservation
                          Remove ==> Emails your coworkers



Wednesday, June 8, 2011
so what? that was just keeping an URI.




                                                       rol!
                                                  cont
                                         ali ze
                                    en tr
                             notc
                           o
                          dRemove==> Cancels the flight
                          Remove ==> Cancels the reservation
                          Remove ==> Emails your coworkers



Wednesday, June 8, 2011
does our ‘rest’
                          systems built in
                               2010
                          work this way?
Wednesday, June 8, 2011
so what? that was just keeping an URI.




                          Remove ==> Cancels the flight
                          Remove ==> Cancels the reservation
                          Remove ==> Emails your coworkers

Wednesday, June 8, 2011
so what? that was just keeping an URI.




                                                           at?
                                                    or   m
                                                 h f
                                          h ic
                                  bu tw

                          Remove ==> Cancels the flight
                          Remove ==> Cancels the reservation
                          Remove ==> Emails your coworkers

Wednesday, June 8, 2011
#json, #xml,
                          #soap #etc?

Wednesday, June 8, 2011
which #json, #xml
                                #etc?


Wednesday, June 8, 2011
exercise


Wednesday, June 8, 2011
so what?




Wednesday, June 8, 2011
so what?




                          micro formats, media types, rdf etc

Wednesday, June 8, 2011
so what?



                                                                nk s!
                                                        er li
                                                     hyp
                                            w i   th
                                      ats
                                  orm
                                 f
                            icro
                          m

                          micro formats, media types, rdf etc

Wednesday, June 8, 2011
integration over the web




Wednesday, June 8, 2011
must ignore



Wednesday, June 8, 2011
bottom up
                           design by committe
                               mime type?
                              microformat
                          controlled vocabulary


Wednesday, June 8, 2011
hypermedia
                          integration over the web




Wednesday, June 8, 2011
guilherme.silveira@caelum.com.br   http://www.caelumobjects.com




                          obrigado
                          @guilhermecaelum




Wednesday, June 8, 2011

More Related Content

LT 08 - Guilherme Silveira - Cache hipermidia

  • 1. Rest in Practice: Hypermedia and Services Guilherme Silveira Wednesday, June 8, 2011
  • 3. @guilhermecaelum guilherme.silveira@caelum.com.br Wednesday, June 8, 2011
  • 4. 11 years, 1992: “Basic” Wednesday, June 8, 2011
  • 5. 2002 guj.com.br 2003 vraptor Wednesday, June 8, 2011
  • 6. 2004 extreme programming 2006 scrum ... Wednesday, June 8, 2011
  • 7. 2009 restfulie http://restfulie.caelumobjects.com/ Wednesday, June 8, 2011
  • 8. 2010 tectura http://www.tectura.com.br Wednesday, June 8, 2011
  • 9. 2004 caelum - daily life www.caelum.com.br Wednesday, June 8, 2011
  • 10. blogs blog.caelum.com.br agilenomundoreal.com.br blog.caelumobjects.com Wednesday, June 8, 2011
  • 12. bank.com calendar.com Wednesday, June 8, 2011
  • 13. bank.com calendar.com travel.com Wednesday, June 8, 2011
  • 14. bank.com calendar.com travel.com company.com Wednesday, June 8, 2011
  • 15. bank.com calendar.com travel.com company.com Wednesday, June 8, 2011
  • 16. what is the future of integration over the web? Wednesday, June 8, 2011
  • 18. Restful Web Services Wednesday, June 8, 2011
  • 19. Restful Web create a saas account Services Wednesday, June 8, 2011
  • 20. Restful Web create a saas account freeze account Services Wednesday, June 8, 2011
  • 21. Restful Web create a saas account freeze account Services reactivate account Wednesday, June 8, 2011
  • 22. Web Restful Services Wednesday, June 8, 2011
  • 23. Web http Restful Services Wednesday, June 8, 2011
  • 24. Web http port 80 Restful Services Wednesday, June 8, 2011
  • 25. Web http port 80 firewall heaven Restful Services Wednesday, June 8, 2011
  • 26. Web Services Restful Wednesday, June 8, 2011
  • 27. Web Services xml, json Restful Wednesday, June 8, 2011
  • 28. Web Services xml, json Restful get, post, ... Wednesday, June 8, 2011
  • 29. unresttrips.com: flight details <?xml version="1.0" encoding="UTF-8" standalum="yes"?> <flight> <information> <from>sao paulo</from> <to>seoul</to> </information>   <value>900.00</value> </flight> Wednesday, June 8, 2011
  • 30. service locator when integrating: coupling++ unrest pay unresttrips.com guilherme Wednesday, June 8, 2011
  • 31. service locator when integrating: coupling++ unrest pay unresttrips.com guilherme Wednesday, June 8, 2011
  • 32. resttrips.com: flight details <?xml version="1.0" encoding="UTF-8" standalum="yes"?> <flight> <information> <from>sao paulo</from> <to>seoul</to> </information>   <value>900.00</value> <link rel="payment" href="http://resttrips.com/payment/custom"/ </flight> Wednesday, June 8, 2011
  • 33. resttrips.com: making the payment flight = Client.at('http://resttrips.com/f/574XR4').get(); confirmation = flight.getLink("payment"). patch(cardInformation, value); Wednesday, June 8, 2011
  • 34. resttrips.com: changing its payment provider <?xml version="1.0" encoding="UTF-8" standalum="yes"?> <flight> <information> <from>sao paulo</from> <to>seoul</to> </information>   <value>900.00</value> <link rel="payment" href="http://paysite.com/custom"/> </flight> Wednesday, June 8, 2011
  • 35. dependency injection when integrating: coupling-- restrips pay resttrips.com guilherme paysite.com Wednesday, June 8, 2011
  • 36. dependency injection when integrating: coupling-- restrips pay resttrips.com guilherme paysite.com Wednesday, June 8, 2011
  • 37. i never travel alone Wednesday, June 8, 2011
  • 38. my friend sergio Wednesday, June 8, 2011
  • 39. resttrips.com: sharing a trip flight = Client.at('http://resttrips.com/f/574XR4').get(); confirmation = flight.getLink("payment"). patch(cardInformation, value/2); // send the payment link to another part of the web flight = Client.at('http://resttrips.com/f/574XR4').get(); confirmation = flight.getLink("payment"). patch(cardInformation, value/2); Wednesday, June 8, 2011
  • 40. resttrips.com: sharing a trip flight = Client.at('http://resttrips.com/f/574XR4').get(); confirmation = flight.getLink("payment"). patch(cardInformation, value/2); // send the payment link to another part of the web flight = Client.at('http://resttrips.com/f/574XR4').get(); confirmation = flight.getLink("payment"). patch(cardInformation, value/2); Wednesday, June 8, 2011
  • 41. resttrips.com: sharing a trip flight = Client.at('http://resttrips.com/f/574XR4').get(); confirmation = flight.getLink("payment"). patch(cardInformation, value/2); // send the payment link to another part of the web flight = Client.at('http://resttrips.com/f/574XR4').get(); confirmation = flight.getLink("payment"). patch(cardInformation, value/2); Wednesday, June 8, 2011
  • 42. calendar: integrating my systems myself = Client.at('http://users.calendar.com') .with(auth).get(); myself.link("calendar").patch(flight.link("self")); Wednesday, June 8, 2011
  • 43. calendar: integrating my systems myself = Client.at('http://users.calendar.com') .with(auth).get(); myself.link("calendar").patch(flight.link("self")); Wednesday, June 8, 2011
  • 44. calendar: more examples me.link("calendar").patch(link_to_birthday_list) me.link("calendar").patch(link_to_hotel_reservation) me.link("calendar").patch(link_to_trip_details) Wednesday, June 8, 2011
  • 46. Any update on the flight ==> reflects here Any update on the hotel ==> reflects here Any update on the meeting ==> reflects here so what? Wednesday, June 8, 2011
  • 47. Any update on the flight ==> reflects here Any update on the hotel ==> reflects here Any update on the meeting ==> reflects here at e! te gr e, in st us so what? ’t j u don Wednesday, June 8, 2011
  • 48. so what? that was just keeping an URI. Wednesday, June 8, 2011
  • 49. so what? that was just keeping an URI. Remove ==> Cancels the flight Remove ==> Cancels the reservation Remove ==> Emails your coworkers Wednesday, June 8, 2011
  • 50. so what? that was just keeping an URI. rol! cont ali ze en tr notc o dRemove==> Cancels the flight Remove ==> Cancels the reservation Remove ==> Emails your coworkers Wednesday, June 8, 2011
  • 51. does our ‘rest’ systems built in 2010 work this way? Wednesday, June 8, 2011
  • 52. so what? that was just keeping an URI. Remove ==> Cancels the flight Remove ==> Cancels the reservation Remove ==> Emails your coworkers Wednesday, June 8, 2011
  • 53. so what? that was just keeping an URI. at? or m h f h ic bu tw Remove ==> Cancels the flight Remove ==> Cancels the reservation Remove ==> Emails your coworkers Wednesday, June 8, 2011
  • 54. #json, #xml, #soap #etc? Wednesday, June 8, 2011
  • 55. which #json, #xml #etc? Wednesday, June 8, 2011
  • 58. so what? micro formats, media types, rdf etc Wednesday, June 8, 2011
  • 59. so what? nk s! er li hyp w i th ats orm f icro m micro formats, media types, rdf etc Wednesday, June 8, 2011
  • 60. integration over the web Wednesday, June 8, 2011
  • 62. bottom up design by committe mime type? microformat controlled vocabulary Wednesday, June 8, 2011
  • 63. hypermedia integration over the web Wednesday, June 8, 2011
  • 64. guilherme.silveira@caelum.com.br http://www.caelumobjects.com obrigado @guilhermecaelum Wednesday, June 8, 2011