Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Building Next-Gen Web APIswith JSON-LD and HydraMarkus Lanthaler
Why do weneed a website?Of course wehave a websiteWhy do weneed an API?1995 2000 2005 2010Of course wehave an APIAdapted f...
Using Web APIs is still challenging
Level 0:The Swamp of POXLevel 1: ResourcesLevel 2: HTTPVerbs
{"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012...
BILLION DOLLARQUESTIONthe
{"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012...
{"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012...
Level 0:The Swamp of POXLevel 1: ResourcesLevel 2: HTTPVerbsLevel 3: Hypermedia Controls
{"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012...
Every API is a snowflake
Result: tightly coupled & brittle systems
{"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012...
{69 64: 63 73 6f 32 39 61 7874 69 74 6c 65: 53 79 6d 66 6f 6e 79 20 4c 69 76 …64 65 73 63 72 69 70 74 69 6f 6e: 50 72 65 7...
Identifiers on the Web: URIs
Linked Data PrinciplesTim Berners-Lee, 2006
JSON-LD
Make data self-descriptive bymapping concepts to URLs
{"id": "markus","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
{"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": "http://sc...
{"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": "http://sc...
{"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": "http://sc...
{"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": "http://sc...
{"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": {"@id": "h...
{"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": {"@id": "h...
{"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": {"@id": "h...
{"@context": "/contexts/person.jsonld","@id": "/people/markus","@type": "http://schema.org/Person","firstname": "Markus","...
CMF
{"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012...
{"@context": "/ctx/context.jsonld","id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","...
{"@context": "/ctx/context.jsonld","id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","...
{"@id": "#comments","@type": "hydra:Link","supportedOperations": [{"@id": "#create-comment","@type": "hydra:CreateResource...
{"@id": "#Comment","@type": "hydra:Class","supportedProperties": [{"property": "#text","required": true,"readonly": false,...
/*** An Issue tracked by the system.** @HydraExpose()*/class Issue{/*** The comments associated with this issue** @HydraEx...
$ php app/console hydra:generate:crud--entity=MLDemoBundle:Issue--route-prefix=/issues/--with-write--no-interactionCRUD ge...
/*** Issue controller** @Route("/issues")*/class IssueController extends HydraController{/*** Creates a new Issue** @Route...
Hydra Console
© 2013, Markus Lanthaler. Some Rights Reserved.http://creativecommons.org/licenses/by-nc-sa/3.0/Thank You
Questions?Markus Lanthalerhttp://www.markus-lanthaler.com@MarkusLanthalermail@markus-lanthaler.com
Image Credits(1) http://www.flickr.com/photos/justinwkern/3729649672/(2) http://www.flickr.com/photos/alexdram/3095419858/...
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Building Next-Generation Web APIs with JSON-LD and Hydra
Prochain SlideShare
Chargement dans…5
×

Building Next-Generation Web APIs with JSON-LD and Hydra

35 664 vues

Publié le

Presented at the Symfony Live Portland 2013 in Portland (Oregon), USA
The recording of the talk is available at http://bit.ly/sl-portland2013-video

Publié dans : Technologie
  • DOWNLOAD FULL BOOKS, INTO AVAILABLE Format, ......................................................................................................................... ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... 1.DOWNLOAD FULL. doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Any copyright for image on slide 16? Seems to be made in Romania
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • I hoped you allow downloads...
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici

Building Next-Generation Web APIs with JSON-LD and Hydra

  1. 1. Building Next-Gen Web APIswith JSON-LD and HydraMarkus Lanthaler
  2. 2. Why do weneed a website?Of course wehave a websiteWhy do weneed an API?1995 2000 2005 2010Of course wehave an APIAdapted from T. Vitvar’s and J. Musser’s ECOWS 2010 Keynote,“ProgrammableWeb.com:Statistics, Trends, and Best Practices”
  3. 3. Using Web APIs is still challenging
  4. 4. Level 0:The Swamp of POXLevel 1: ResourcesLevel 2: HTTPVerbs
  5. 5. {"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012-11-26T04:49:44Z"}http://example.com/issues/cso29ax
  6. 6. BILLION DOLLARQUESTIONthe
  7. 7. {"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012-11-26T04:49:44Z"}http://example.com/issues/cso29axhttp://example.com/issue/{id}/comments/
  8. 8. {"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012-11-26T04:49:44Z","comments": "/issues/cso29ax/comments/"}http://example.com/issues/cso29ax
  9. 9. Level 0:The Swamp of POXLevel 1: ResourcesLevel 2: HTTPVerbsLevel 3: Hypermedia Controls
  10. 10. {"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012-11-26T04:49:44Z","comments": "/issues/cso29ax/comments/"}http://example.com/issues/cso29ax
  11. 11. Every API is a snowflake
  12. 12. Result: tightly coupled & brittle systems
  13. 13. {"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012-11-26T04:49:44Z","comments": "/issues/cso29ax/comments/"}http://example.com/issues/cso29ax
  14. 14. {69 64: 63 73 6f 32 39 61 7874 69 74 6c 65: 53 79 6d 66 6f 6e 79 20 4c 69 76 …64 65 73 63 72 69 70 74 69 6f 6e: 50 72 65 70 61 …69 73 5f 6f 70 65 6e: 0163 72 65 61 74 65 64 5f 61 74: 32 30 31 32 2d 31 …63 6f 6d 6d 65 6e 74 73: 2f 69 73 73 75 65 73 2f …}http://example.com/issues/cso29ax
  15. 15. Identifiers on the Web: URIs
  16. 16. Linked Data PrinciplesTim Berners-Lee, 2006
  17. 17. JSON-LD
  18. 18. Make data self-descriptive bymapping concepts to URLs
  19. 19. {"id": "markus","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
  20. 20. {"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": "http://schema.org/url"},"id": "markus","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
  21. 21. {"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": "http://schema.org/url"},"@id": "/people/markus","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
  22. 22. {"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": "http://schema.org/url"},"@id": "/people/markus","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
  23. 23. {"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": "http://schema.org/url"},"@id": "/people/markus","firstname": "Markus","lastname": "Lanthaler","homepage": { "@id": "http://www.markus-lanthaler.com/" }}
  24. 24. {"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": {"@id": "http://schema.org/url", "@type": "@id" },},"@id": "/people/markus","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
  25. 25. {"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": {"@id": "http://schema.org/url", "@type": "@id" }},"@id": "/people/markus","@type": "http://schema.org/Person","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
  26. 26. {"@context": {"firstname": "http://schema.org/givenName","lastname": "http://schema.org/familyName","homepage": {"@id": "http://schema.org/url", "@type": "@id" }},"@id": "/people/markus","@type": "http://schema.org/Person","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
  27. 27. {"@context": "/contexts/person.jsonld","@id": "/people/markus","@type": "http://schema.org/Person","firstname": "Markus","lastname": "Lanthaler","homepage": "http://www.markus-lanthaler.com/"}
  28. 28. CMF
  29. 29. {"id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012-11-26T04:49:44Z","comments": "/issues/cso29ax/comments/"}http://example.com/issues/cso29ax
  30. 30. {"@context": "/ctx/context.jsonld","id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012-11-26T04:49:44Z","comments": "/issues/cso29ax/comments/"}http://example.com/issues/cso29ax
  31. 31. {"@context": "/ctx/context.jsonld","id": "cso29ax","title": "Symfony Live Portland 2013","description": "Prepare slides","is_open": true,"created_at": "2012-11-26T04:49:44Z","comments": "/issues/cso29ax/comments/"}http://example.com/issues/cso29ax
  32. 32. {"@id": "#comments","@type": "hydra:Link","supportedOperations": [{"@id": "#create-comment","@type": "hydra:CreateResourceOperation","label": "Creates a new comment","method": "POST","expects": "#Comment","returns": "#Comment"}]}http://example.com/api/doc
  33. 33. {"@id": "#Comment","@type": "hydra:Class","supportedProperties": [{"property": "#text","required": true,"readonly": false,"writeonly": false}]}http://example.com/api/doc
  34. 34. /*** An Issue tracked by the system.** @HydraExpose()*/class Issue{/*** The comments associated with this issue** @HydraExpose()* @HydraCollection("issue_comments")* @HydraOperations("issue_comment_create")*/private $comments;// ... other members and methods ...}
  35. 35. $ php app/console hydra:generate:crud--entity=MLDemoBundle:Issue--route-prefix=/issues/--with-write--no-interactionCRUD generationGenerating the CRUD code: OKYou can now start using the generated code!
  36. 36. /*** Issue controller** @Route("/issues")*/class IssueController extends HydraController{/*** Creates a new Issue** @Route("/", name="issue_create")* @Method("POST")** @HydraOperation(expect = "MLDemoBundleEntityIssue")** @return MLDemoBundleEntityIssue*/public function collectionPostAction(Request $request){...
  37. 37. Hydra Console
  38. 38. © 2013, Markus Lanthaler. Some Rights Reserved.http://creativecommons.org/licenses/by-nc-sa/3.0/Thank You
  39. 39. Questions?Markus Lanthalerhttp://www.markus-lanthaler.com@MarkusLanthalermail@markus-lanthaler.com
  40. 40. Image Credits(1) http://www.flickr.com/photos/justinwkern/3729649672/(2) http://www.flickr.com/photos/alexdram/3095419858/(3) http://www.flickr.com/photos/kaptainkobold/3203311346/(11) http://info.cern.ch/hypertext/WWW/TheProject.html(15) Adapted from http://www.flickr.com/photos/nebarnix/361650027/(16) http://www.flickr.com/photos/joyoflife/1570126182/(19) http://www.flickr.com/photos/rossiprojects/5592552858/(21) http://www.flickr.com/photos/rossiprojects/5592552858/(23) http://www.flickr.com/photos/clevercupcakes/4397152402/(31) http://schema.org/Person(36) http://www.vonwong.com/(42) http://www.flickr.com/photos/jakecaptive/3205277810/(47) http://www.flickr.com/photos/sis/126152933/

×