Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Beyond The Web: Drupal Meets The Desktop (And Mobile)

3,783 views

Published on

For more on this talk, see these links:

http://dc2009.drupalcon.org/session/beyond-web-drupal-meets-desktop-and-mobile
http://codesorcery.net/dcdc

Published in: Technology, Business
  • Be the first to comment

Beyond The Web: Drupal Meets The Desktop (And Mobile)

  1. 1. Beyond The Web Drupal Meets The Desktop (And Mobile) Justin Miller Code Sorcery Workshop, LLC http://codesorcery.net/dcdc Tuesday, March 10, 2009
  2. 2. Introduction Tuesday, March 10, 2009
  3. 3. Introduction Tuesday, March 10, 2009
  4. 4. Introduction Personal introduction Tuesday, March 10, 2009
  5. 5. Introduction Personal introduction Format & conventions for this talk Tuesday, March 10, 2009
  6. 6. Introduction Personal introduction Format & conventions for this talk Assume familiarity with core/contrib, modules, hooks Tuesday, March 10, 2009
  7. 7. Introduction Personal introduction Format & conventions for this talk Assume familiarity with core/contrib, modules, hooks Functions & other code like_this() Tuesday, March 10, 2009
  8. 8. Introduction Personal introduction Format & conventions for this talk Assume familiarity with core/contrib, modules, hooks Functions & other code like_this() Modules represented {like_so} Tuesday, March 10, 2009
  9. 9. Introduction Personal introduction Format & conventions for this talk Assume familiarity with core/contrib, modules, hooks Functions & other code like_this() Modules represented {like_so} http://drupal.org/project/{foo} Tuesday, March 10, 2009
  10. 10. Introduction Personal introduction Format & conventions for this talk Assume familiarity with core/contrib, modules, hooks Functions & other code like_this() Modules represented {like_so} http://drupal.org/project/{foo} Twitter hashtag #drupalbeyond Tuesday, March 10, 2009
  11. 11. Introduction Personal introduction Format & conventions for this talk Assume familiarity with core/contrib, modules, hooks Functions & other code like_this() Modules represented {like_so} http://drupal.org/project/{foo} Twitter hashtag #drupalbeyond Q&A at the end Tuesday, March 10, 2009
  12. 12. Who are you? Tuesday, March 10, 2009
  13. 13. Who are you? A Drupal developer What’s out there? Does it work? Tuesday, March 10, 2009
  14. 14. Who are you? A Drupal developer What’s out there? Does it work? A desktop or mobile developer Can I use Drupal as a backend? How? Why? Tuesday, March 10, 2009
  15. 15. Who are you? A Drupal developer What’s out there? Does it work? A desktop or mobile developer Can I use Drupal as a backend? How? Why? A non-developer Will Drupal play nice with my existing systems? Tuesday, March 10, 2009
  16. 16. Focus Of This Talk Tuesday, March 10, 2009
  17. 17. Focus Of This Talk Tuesday, March 10, 2009
  18. 18. Focus Of This Talk Direct concerns for desktop & mobile Tuesday, March 10, 2009
  19. 19. Focus Of This Talk Direct concerns for desktop & mobile Standards-based exchange Tuesday, March 10, 2009
  20. 20. Focus Of This Talk Direct concerns for desktop & mobile Standards-based exchange Authentication & security Tuesday, March 10, 2009
  21. 21. Focus Of This Talk Direct concerns for desktop & mobile Standards-based exchange Authentication & security Building on what is available Tuesday, March 10, 2009
  22. 22. Today’s Roadmap Tuesday, March 10, 2009
  23. 23. Today’s Roadmap Tuesday, March 10, 2009
  24. 24. Today’s Roadmap Putting Data In Tuesday, March 10, 2009
  25. 25. Today’s Roadmap Putting Data In Getting Data Out Tuesday, March 10, 2009
  26. 26. Today’s Roadmap Putting Data In Getting Data Out Authentication Tuesday, March 10, 2009
  27. 27. Today’s Roadmap Putting Data In Getting Data Out Authentication Advanced Interop (XML-RPC, Services) Tuesday, March 10, 2009
  28. 28. Putting Data In Putting Data In Tuesday, March 10, 2009
  29. 29. Putting Data In Putting Data In Tuesday, March 10, 2009
  30. 30. Putting Data In Desktop Publishing Putting Data In Tuesday, March 10, 2009
  31. 31. Putting Data In Desktop Publishing File Uploads & Attachments Putting Data In Tuesday, March 10, 2009
  32. 32. Putting Data In Desktop Publishing File Uploads & Attachments Files: The Next Level (File Framework) Putting Data In Tuesday, March 10, 2009
  33. 33. Putting Data In Desktop Publishing File Uploads & Attachments Files: The Next Level (File Framework) WebDAV For Fun & Profit Putting Data In Tuesday, March 10, 2009
  34. 34. Desktop Publishing Putting Data In ➔ Desktop Publishing Tuesday, March 10, 2009
  35. 35. Desktop Publishing Basic support made available by Blog API Putting Data In ➔ Desktop Publishing Tuesday, March 10, 2009
  36. 36. Desktop Publishing Basic support made available by Blog API Optional core module {blogapi} Putting Data In ➔ Desktop Publishing Tuesday, March 10, 2009
  37. 37. Desktop Publishing Basic support made available by Blog API Optional core module {blogapi} Implementation of hook_xmlrpc() (more later) Putting Data In ➔ Desktop Publishing Tuesday, March 10, 2009
  38. 38. Desktop Publishing Basic support made available by Blog API Optional core module {blogapi} Implementation of hook_xmlrpc() (more later) Blogger, MetaWeblog, & Movable Type Putting Data In ➔ Desktop Publishing Tuesday, March 10, 2009
  39. 39. Desktop Publishing Basic support made available by Blog API Optional core module {blogapi} Implementation of hook_xmlrpc() (more later) Blogger, MetaWeblog, & Movable Type Google Docs can publish to this! Putting Data In ➔ Desktop Publishing Tuesday, March 10, 2009
  40. 40. Desktop Publishing Basic support made available by Blog API Optional core module {blogapi} Implementation of hook_xmlrpc() (more later) Blogger, MetaWeblog, & Movable Type Google Docs can publish to this! Clients available for every platform Putting Data In ➔ Desktop Publishing Tuesday, March 10, 2009
  41. 41. File Uploads & Attachments Putting Data In ➔ File Uploads & Attachments Tuesday, March 10, 2009
  42. 42. File Uploads & Attachments Core support with {upload} Putting Data In ➔ File Uploads & Attachments Tuesday, March 10, 2009
  43. 43. File Uploads & Attachments Core support with {upload} Files go into a folder on the server Putting Data In ➔ File Uploads & Attachments Tuesday, March 10, 2009
  44. 44. File Uploads & Attachments Core support with {upload} Files go into a folder on the server Basic metadata is stored in the DB Name, path, type, size Putting Data In ➔ File Uploads & Attachments Tuesday, March 10, 2009
  45. 45. File Uploads & Attachments Core support with {upload} Files go into a folder on the server Basic metadata is stored in the DB Name, path, type, size Can limit upload types accepted by extension Putting Data In ➔ File Uploads & Attachments Tuesday, March 10, 2009
  46. 46. File Uploads & Attachments Core support with {upload} Files go into a folder on the server Basic metadata is stored in the DB Name, path, type, size Can limit upload types accepted by extension Can enable private download method Store files out of site root Drupal becomes the gatekeeper for file permissions Putting Data In ➔ File Uploads & Attachments Tuesday, March 10, 2009
  47. 47. File Framework Putting Data In ➔ File Framework Tuesday, March 10, 2009
  48. 48. File Framework Contrib module suite called {fileframework} Putting Data In ➔ File Framework Tuesday, March 10, 2009
  49. 49. File Framework Contrib module suite called {fileframework} Provides a ‘file’ content type to Drupal Putting Data In ➔ File Framework Tuesday, March 10, 2009
  50. 50. File Framework Contrib module suite called {fileframework} Provides a ‘file’ content type to Drupal Remember: normally, files are not nodes Putting Data In ➔ File Framework Tuesday, March 10, 2009
  51. 51. File Framework Contrib module suite called {fileframework} Provides a ‘file’ content type to Drupal Remember: normally, files are not nodes Advanced feature set Putting Data In ➔ File Framework Tuesday, March 10, 2009
  52. 52. File Framework Contrib module suite called {fileframework} Provides a ‘file’ content type to Drupal Remember: normally, files are not nodes Advanced feature set Virus scanning on upload Putting Data In ➔ File Framework Tuesday, March 10, 2009
  53. 53. File Framework Contrib module suite called {fileframework} Provides a ‘file’ content type to Drupal Remember: normally, files are not nodes Advanced feature set Virus scanning on upload Automatic conversion Putting Data In ➔ File Framework Tuesday, March 10, 2009
  54. 54. File Framework Contrib module suite called {fileframework} Provides a ‘file’ content type to Drupal Remember: normally, files are not nodes Advanced feature set Virus scanning on upload Automatic conversion Example: MPEG to FLV or HTML to TXT Putting Data In ➔ File Framework Tuesday, March 10, 2009
  55. 55. File Framework Contrib module suite called {fileframework} Provides a ‘file’ content type to Drupal Remember: normally, files are not nodes Advanced feature set Virus scanning on upload Automatic conversion Example: MPEG to FLV or HTML to TXT Metadata extraction (EXIF, ID3, PDF properties, etc.) Putting Data In ➔ File Framework Tuesday, March 10, 2009
  56. 56. File Framework Contrib module suite called {fileframework} Provides a ‘file’ content type to Drupal Remember: normally, files are not nodes Advanced feature set Virus scanning on upload Automatic conversion Example: MPEG to FLV or HTML to TXT Metadata extraction (EXIF, ID3, PDF properties, etc.) AHAH-enabled inline previews Putting Data In ➔ File Framework Tuesday, March 10, 2009
  57. 57. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  58. 58. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  59. 59. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  60. 60. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  61. 61. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  62. 62. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  63. 63. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  64. 64. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  65. 65. File Framework Putting Data In ➔ File Framework Tuesday, March 10, 2009
  66. 66. File Framework Efficient Putting Data In ➔ File Framework Tuesday, March 10, 2009
  67. 67. File Framework Efficient File nodes can be reused Putting Data In ➔ File Framework Tuesday, March 10, 2009
  68. 68. File Framework Efficient File nodes can be reused Re-attached again and again Putting Data In ➔ File Framework Tuesday, March 10, 2009
  69. 69. File Framework Efficient File nodes can be reused Re-attached again and again Autocomplete search field Putting Data In ➔ File Framework Tuesday, March 10, 2009
  70. 70. File Framework Efficient File nodes can be reused Re-attached again and again Autocomplete search field Backend is distributed & content-addressable Putting Data In ➔ File Framework Tuesday, March 10, 2009
  71. 71. File Framework Efficient File nodes can be reused Re-attached again and again Autocomplete search field Backend is distributed & content-addressable Repositories on Memcached, SFTP, Amazon S3 Putting Data In ➔ File Framework Tuesday, March 10, 2009
  72. 72. File Framework Efficient File nodes can be reused Re-attached again and again Autocomplete search field Backend is distributed & content-addressable Repositories on Memcached, SFTP, Amazon S3 See {bitcache} for more on the specifics Putting Data In ➔ File Framework Tuesday, March 10, 2009
  73. 73. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  74. 74. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  75. 75. Putting Data In ➔ File Framework Tuesday, March 10, 2009
  76. 76. WebDAV Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  77. 77. WebDAV Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  78. 78. WebDAV File Server {fileserver} Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  79. 79. WebDAV File Server {fileserver} Based on {dav} Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  80. 80. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  81. 81. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy File Relations Server {filerelationsserver} Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  82. 82. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy File Relations Server {filerelationsserver} Also based on {dav} Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  83. 83. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy File Relations Server {filerelationsserver} Also based on {dav} Browse file nodes by: Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  84. 84. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy File Relations Server {filerelationsserver} Also based on {dav} Browse file nodes by: MIME type Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  85. 85. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy File Relations Server {filerelationsserver} Also based on {dav} Browse file nodes by: MIME type Attached-to node type (page, story, etc.) Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  86. 86. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy File Relations Server {filerelationsserver} Also based on {dav} Browse file nodes by: MIME type Attached-to node type (page, story, etc.) Group (via Organic Groups) Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  87. 87. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy File Relations Server {filerelationsserver} Also based on {dav} Browse file nodes by: MIME type Attached-to node type (page, story, etc.) Group (via Organic Groups) WebDAV {webdav} Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  88. 88. WebDAV File Server {fileserver} Based on {dav} Browse file nodes by taxonomy File Relations Server {filerelationsserver} Also based on {dav} Browse file nodes by: MIME type Attached-to node type (page, story, etc.) Group (via Organic Groups) WebDAV {webdav} Access to textual nodes (pages, stories, etc.) Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  89. 89. Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  90. 90. Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  91. 91. Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  92. 92. Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  93. 93. Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  94. 94. Putting Data In ➔ WebDAV Tuesday, March 10, 2009
  95. 95. Getting Data Out Getting Data Out Tuesday, March 10, 2009
  96. 96. Getting Data Out Getting Data Out Tuesday, March 10, 2009
  97. 97. Getting Data Out Feeds Getting Data Out Tuesday, March 10, 2009
  98. 98. Getting Data Out Feeds Email Getting Data Out Tuesday, March 10, 2009
  99. 99. Getting Data Out Feeds Email Popular Formats Getting Data Out Tuesday, March 10, 2009
  100. 100. Getting Data Out Feeds Email Popular Formats Other Projects of Note Getting Data Out Tuesday, March 10, 2009
  101. 101. General Feed Needs Getting Data Out → Feeds Tuesday, March 10, 2009
  102. 102. General Feed Needs Getting Data Out → Feeds Tuesday, March 10, 2009
  103. 103. General Feed Needs Core Getting Data Out → Feeds Tuesday, March 10, 2009
  104. 104. General Feed Needs Core Automatic node aggregation (e.g., blog) Getting Data Out → Feeds Tuesday, March 10, 2009
  105. 105. General Feed Needs Core Automatic node aggregation (e.g., blog) Create views with {views} Getting Data Out → Feeds Tuesday, March 10, 2009
  106. 106. General Feed Needs Core Automatic node aggregation (e.g., blog) Create views with {views} Create displays for pages, blocks Getting Data Out → Feeds Tuesday, March 10, 2009
  107. 107. General Feed Needs Core Automatic node aggregation (e.g., blog) Create views with {views} Create displays for pages, blocks Also create displays for feeds Getting Data Out → Feeds Tuesday, March 10, 2009
  108. 108. General Feed Needs Core Automatic node aggregation (e.g., blog) Create views with {views} Create displays for pages, blocks Also create displays for feeds “List, in table form, all comments on a node, then provide an RSS feed of those comments.” Getting Data Out → Feeds Tuesday, March 10, 2009
  109. 109. Feed Needs: Authentication Getting Data Out → Feeds Tuesday, March 10, 2009
  110. 110. Feed Needs: Authentication Getting Data Out → Feeds Tuesday, March 10, 2009
  111. 111. Feed Needs: Authentication Token authentication {tokenauth} Getting Data Out → Feeds Tuesday, March 10, 2009
  112. 112. Feed Needs: Authentication Token authentication {tokenauth} Checks for token present in URL Getting Data Out → Feeds Tuesday, March 10, 2009
  113. 113. Feed Needs: Authentication Token authentication {tokenauth} Checks for token present in URL User is automatically logged in as token owner Getting Data Out → Feeds Tuesday, March 10, 2009
  114. 114. Feed Needs: Authentication Token authentication {tokenauth} Checks for token present in URL User is automatically logged in as token owner Server-based authentication Getting Data Out → Feeds Tuesday, March 10, 2009
  115. 115. Feed Needs: Authentication Token authentication {tokenauth} Checks for token present in URL User is automatically logged in as token owner Server-based authentication .htaccess, database-backed, LDAP Getting Data Out → Feeds Tuesday, March 10, 2009
  116. 116. Feed Needs: Authentication Token authentication {tokenauth} Checks for token present in URL User is automatically logged in as token owner Server-based authentication .htaccess, database-backed, LDAP Applies to non-feed URLs too Getting Data Out → Feeds Tuesday, March 10, 2009
  117. 117. Feed Needs: Authentication Token authentication {tokenauth} Checks for token present in URL User is automatically logged in as token owner Server-based authentication .htaccess, database-backed, LDAP Applies to non-feed URLs too Covered in more general terms later Getting Data Out → Feeds Tuesday, March 10, 2009
  118. 118. Other Feed Needs Tuesday, March 10, 2009
  119. 119. Other Feed Needs Atom in addition to RSS using {atom} Tuesday, March 10, 2009
  120. 120. Other Feed Needs Atom in addition to RSS using {atom} Provides node, blog, user blog, & taxonomy feeds Tuesday, March 10, 2009
  121. 121. Other Feed Needs Atom in addition to RSS using {atom} Provides node, blog, user blog, & taxonomy feeds Feed Path Publisher {feed_path_publisher} Tuesday, March 10, 2009
  122. 122. Other Feed Needs Atom in addition to RSS using {atom} Provides node, blog, user blog, & taxonomy feeds Feed Path Publisher {feed_path_publisher} Adds <link> tags to pages based on path Tuesday, March 10, 2009
  123. 123. Other Feed Needs Atom in addition to RSS using {atom} Provides node, blog, user blog, & taxonomy feeds Feed Path Publisher {feed_path_publisher} Adds <link> tags to pages based on path Tuesday, March 10, 2009
  124. 124. Email Getting Data Out → Email Tuesday, March 10, 2009
  125. 125. Email Getting Data Out → Email Tuesday, March 10, 2009
  126. 126. Email Core includes drupal_mail() Getting Data Out → Email Tuesday, March 10, 2009
  127. 127. Email Core includes drupal_mail() Important since it abstracts sending Getting Data Out → Email Tuesday, March 10, 2009
  128. 128. Email Core includes drupal_mail() Important since it abstracts sending Uses PHP mail() by default Getting Data Out → Email Tuesday, March 10, 2009
  129. 129. Email Core includes drupal_mail() Important since it abstracts sending Uses PHP mail() by default Allows swapping the backend Getting Data Out → Email Tuesday, March 10, 2009
  130. 130. Email Core includes drupal_mail() Important since it abstracts sending Uses PHP mail() by default Allows swapping the backend Example: development site holding email Getting Data Out → Email Tuesday, March 10, 2009
  131. 131. Email Core includes drupal_mail() Important since it abstracts sending Uses PHP mail() by default Allows swapping the backend Example: development site holding email More robust emailing with {smtp} Getting Data Out → Email Tuesday, March 10, 2009
  132. 132. Email Core includes drupal_mail() Important since it abstracts sending Uses PHP mail() by default Allows swapping the backend Example: development site holding email More robust emailing with {smtp} Centralize your outgoing mail Getting Data Out → Email Tuesday, March 10, 2009
  133. 133. Email Core includes drupal_mail() Important since it abstracts sending Uses PHP mail() by default Allows swapping the backend Example: development site holding email More robust emailing with {smtp} Centralize your outgoing mail Send mail over SSL Getting Data Out → Email Tuesday, March 10, 2009
  134. 134. Email Core includes drupal_mail() Important since it abstracts sending Uses PHP mail() by default Allows swapping the backend Example: development site holding email More robust emailing with {smtp} Centralize your outgoing mail Send mail over SSL Identify mailing sites by username (via SMTP auth) Getting Data Out → Email Tuesday, March 10, 2009
  135. 135. Popular Formats Getting Data Out → Popular Formats Tuesday, March 10, 2009
  136. 136. Popular Formats CSV, Word, TXT with {views_bonus} Getting Data Out → Popular Formats Tuesday, March 10, 2009
  137. 137. Popular Formats CSV, Word, TXT with {views_bonus} Simple read-only JSON with {views_json} Getting Data Out → Popular Formats Tuesday, March 10, 2009
  138. 138. Popular Formats CSV, Word, TXT with {views_bonus} Simple read-only JSON with {views_json} KML map data with {kml} Getting Data Out → Popular Formats Tuesday, March 10, 2009
  139. 139. Other Projects of Note Getting Data Out → Other Projects Tuesday, March 10, 2009
  140. 140. Other Projects of Note Print & PDF with {print} Getting Data Out → Other Projects Tuesday, March 10, 2009
  141. 141. Other Projects of Note Print & PDF with {print} Force file downloads with {file_force} Getting Data Out → Other Projects Tuesday, March 10, 2009
  142. 142. Other Projects of Note Print & PDF with {print} Force file downloads with {file_force} Backup & migrate with {backup_migrate} Getting Data Out → Other Projects Tuesday, March 10, 2009
  143. 143. Authentication Authentication Tuesday, March 10, 2009
  144. 144. Authentication Authentication Tuesday, March 10, 2009
  145. 145. Authentication OpenID & OAuth Authentication Tuesday, March 10, 2009
  146. 146. Authentication OpenID & OAuth LDAP Authentication Tuesday, March 10, 2009
  147. 147. Authentication OpenID & OAuth LDAP HTTP Authentication Tuesday, March 10, 2009
  148. 148. Auth: OpenID & OAuth Authentication → OpenID & OAuth Tuesday, March 10, 2009
  149. 149. Auth: OpenID & OAuth Authentication → OpenID & OAuth Tuesday, March 10, 2009
  150. 150. Auth: OpenID & OAuth Login and a “valet key” for many websites Authentication → OpenID & OAuth Tuesday, March 10, 2009
  151. 151. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Authentication → OpenID & OAuth Tuesday, March 10, 2009
  152. 152. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Authentication → OpenID & OAuth Tuesday, March 10, 2009
  153. 153. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Allows one or more identities Authentication → OpenID & OAuth Tuesday, March 10, 2009
  154. 154. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Allows one or more identities OpenID provider support Authentication → OpenID & OAuth Tuesday, March 10, 2009
  155. 155. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Allows one or more identities OpenID provider support Contrib module {openid_provider} Authentication → OpenID & OAuth Tuesday, March 10, 2009
  156. 156. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Allows one or more identities OpenID provider support Contrib module {openid_provider} See James Walker’s talk happening right now! Authentication → OpenID & OAuth Tuesday, March 10, 2009
  157. 157. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Allows one or more identities OpenID provider support Contrib module {openid_provider} See James Walker’s talk happening right now! Don’t hate me for not telling you earlier Authentication → OpenID & OAuth Tuesday, March 10, 2009
  158. 158. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Allows one or more identities OpenID provider support Contrib module {openid_provider} See James Walker’s talk happening right now! Don’t hate me for not telling you earlier OAuth support with {oauth} Authentication → OpenID & OAuth Tuesday, March 10, 2009
  159. 159. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Allows one or more identities OpenID provider support Contrib module {openid_provider} See James Walker’s talk happening right now! Don’t hate me for not telling you earlier OAuth support with {oauth} Gives users control over apps that use their data Authentication → OpenID & OAuth Tuesday, March 10, 2009
  160. 160. Auth: OpenID & OAuth Login and a “valet key” for many websites OpenID login support Included in core as of D6 {openid} Allows one or more identities OpenID provider support Contrib module {openid_provider} See James Walker’s talk happening right now! Don’t hate me for not telling you earlier OAuth support with {oauth} Gives users control over apps that use their data Can use this in your own services (including with {services}) Authentication → OpenID & OAuth Tuesday, March 10, 2009
  161. 161. Auth: LDAP Authentication → LDAP Tuesday, March 10, 2009
  162. 162. Auth: LDAP Authentication → LDAP Tuesday, March 10, 2009
  163. 163. Auth: LDAP Lightweight Directory Access Protocol Authentication → LDAP Tuesday, March 10, 2009
  164. 164. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Authentication → LDAP Tuesday, March 10, 2009
  165. 165. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Integration with {ldap_integration} Authentication → LDAP Tuesday, March 10, 2009
  166. 166. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Integration with {ldap_integration} Authentication into a Drupal site Authentication → LDAP Tuesday, March 10, 2009
  167. 167. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Integration with {ldap_integration} Authentication into a Drupal site Roles based on group Authentication → LDAP Tuesday, March 10, 2009
  168. 168. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Integration with {ldap_integration} Authentication into a Drupal site Roles based on group Some support for working with LDAP data Authentication → LDAP Tuesday, March 10, 2009
  169. 169. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Integration with {ldap_integration} Authentication into a Drupal site Roles based on group Some support for working with LDAP data Provisioning with {ldap_provisioning} Authentication → LDAP Tuesday, March 10, 2009
  170. 170. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Integration with {ldap_integration} Authentication into a Drupal site Roles based on group Some support for working with LDAP data Provisioning with {ldap_provisioning} Integrates Drupal’s user registration process with LDAP Authentication → LDAP Tuesday, March 10, 2009
  171. 171. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Integration with {ldap_integration} Authentication into a Drupal site Roles based on group Some support for working with LDAP data Provisioning with {ldap_provisioning} Integrates Drupal’s user registration process with LDAP Optional approval queue Authentication → LDAP Tuesday, March 10, 2009
  172. 172. Auth: LDAP Lightweight Directory Access Protocol Enterprise-level solution (client integration, replication) Integration with {ldap_integration} Authentication into a Drupal site Roles based on group Some support for working with LDAP data Provisioning with {ldap_provisioning} Integrates Drupal’s user registration process with LDAP Optional approval queue Does the LDAP account creation dirty work Authentication → LDAP Tuesday, March 10, 2009
  173. 173. Auth: HTTP Authentication → HTTP Tuesday, March 10, 2009
  174. 174. Auth: HTTP Authentication → HTTP Tuesday, March 10, 2009
  175. 175. Auth: HTTP {securesite} & {webserver_auth} Authentication → HTTP Tuesday, March 10, 2009
  176. 176. Auth: HTTP {securesite} & {webserver_auth} Both protect resources at the HTTP level Authentication → HTTP Tuesday, March 10, 2009
  177. 177. Auth: HTTP {securesite} & {webserver_auth} Both protect resources at the HTTP level Both integrate with Drupal user database Authentication → HTTP Tuesday, March 10, 2009
  178. 178. Auth: HTTP {securesite} & {webserver_auth} Both protect resources at the HTTP level Both integrate with Drupal user database Differ in scope: Drupal vs. Apache Authentication → HTTP Tuesday, March 10, 2009
  179. 179. Auth: HTTP {securesite} & {webserver_auth} Both protect resources at the HTTP level Both integrate with Drupal user database Differ in scope: Drupal vs. Apache IP-based login {ip_login} Authentication → HTTP Tuesday, March 10, 2009
  180. 180. Auth: HTTP {securesite} & {webserver_auth} Both protect resources at the HTTP level Both integrate with Drupal user database Differ in scope: Drupal vs. Apache IP-based login {ip_login} Associate single or ranges of IPs to users Authentication → HTTP Tuesday, March 10, 2009
  181. 181. Auth: HTTP {securesite} & {webserver_auth} Both protect resources at the HTTP level Both integrate with Drupal user database Differ in scope: Drupal vs. Apache IP-based login {ip_login} Associate single or ranges of IPs to users Certificates with {certificatelogin} Authentication → HTTP Tuesday, March 10, 2009
  182. 182. Auth: HTTP {securesite} & {webserver_auth} Both protect resources at the HTTP level Both integrate with Drupal user database Differ in scope: Drupal vs. Apache IP-based login {ip_login} Associate single or ranges of IPs to users Certificates with {certificatelogin} Assumes web server is handling cert auth Authentication → HTTP Tuesday, March 10, 2009
  183. 183. Auth: HTTP {securesite} & {webserver_auth} Both protect resources at the HTTP level Both integrate with Drupal user database Differ in scope: Drupal vs. Apache IP-based login {ip_login} Associate single or ranges of IPs to users Certificates with {certificatelogin} Assumes web server is handling cert auth Looks for environment variable(s) to figure out who you are Authentication → HTTP Tuesday, March 10, 2009
  184. 184. Advanced Interop Advanced Interop Tuesday, March 10, 2009
  185. 185. Advanced Interop Advanced Interop Tuesday, March 10, 2009
  186. 186. Advanced Interop XML-RPC Advanced Interop Tuesday, March 10, 2009
  187. 187. Advanced Interop XML-RPC Services Advanced Interop Tuesday, March 10, 2009
  188. 188. XML-RPC Advanced Interop → XML-RPC Tuesday, March 10, 2009
  189. 189. XML-RPC Remote Procedure Calls Advanced Interop → XML-RPC Tuesday, March 10, 2009
  190. 190. XML-RPC Remote Procedure Calls In core now (and always has been) Advanced Interop → XML-RPC Tuesday, March 10, 2009
  191. 191. XML-RPC Remote Procedure Calls In core now (and always has been) Start here for basic custom APIs Advanced Interop → XML-RPC Tuesday, March 10, 2009
  192. 192. XML-RPC: Status Advanced Interop → XML-RPC Tuesday, March 10, 2009
  193. 193. XML-RPC: Status Has been in Drupal since the beginning Advanced Interop → XML-RPC Tuesday, March 10, 2009
  194. 194. XML-RPC: Status Has been in Drupal since the beginning Effectively a subset of SOAP Advanced Interop → XML-RPC Tuesday, March 10, 2009
  195. 195. XML-RPC: Status Has been in Drupal since the beginning Effectively a subset of SOAP Security fears? Not so fast Advanced Interop → XML-RPC Tuesday, March 10, 2009
  196. 196. XML-RPC: Status Has been in Drupal since the beginning Effectively a subset of SOAP Security fears? Not so fast Widely accessible Advanced Interop → XML-RPC Tuesday, March 10, 2009
  197. 197. XML-RPC: Status Has been in Drupal since the beginning Effectively a subset of SOAP Security fears? Not so fast Widely accessible PHP, Perl, Python, C, C++, Objective-C, Ruby, Java, JavaScript, Flash, .NET, Erlang Advanced Interop → XML-RPC Tuesday, March 10, 2009
  198. 198. XML-RPC: Status Has been in Drupal since the beginning Effectively a subset of SOAP Security fears? Not so fast Widely accessible PHP, Perl, Python, C, C++, Objective-C, Ruby, Java, JavaScript, Flash, .NET, Erlang You get the idea Advanced Interop → XML-RPC Tuesday, March 10, 2009
  199. 199. XML-RPC: Basics Advanced Interop → XML-RPC Tuesday, March 10, 2009
  200. 200. XML-RPC: Basics XML encoding Advanced Interop → XML-RPC Tuesday, March 10, 2009
  201. 201. XML-RPC: Basics XML encoding HTTP transport Advanced Interop → XML-RPC Tuesday, March 10, 2009
  202. 202. XML-RPC: Basics XML encoding HTTP transport Can use HTTPS for security Advanced Interop → XML-RPC Tuesday, March 10, 2009
  203. 203. XML-RPC: Basics XML encoding HTTP transport Can use HTTPS for security Authentication options at HTTP layer Advanced Interop → XML-RPC Tuesday, March 10, 2009
  204. 204. XML-RPC: Basics XML encoding HTTP transport Can use HTTPS for security Authentication options at HTTP layer Custom authentication in the method layer Advanced Interop → XML-RPC Tuesday, March 10, 2009
  205. 205. XML-RPC: Basics XML encoding HTTP transport Can use HTTPS for security Authentication options at HTTP layer Custom authentication in the method layer Send credentials as argument(s) Advanced Interop → XML-RPC Tuesday, March 10, 2009
  206. 206. XML-RPC: Basics XML encoding HTTP transport Can use HTTPS for security Authentication options at HTTP layer Custom authentication in the method layer Send credentials as argument(s) Custom API key solution Advanced Interop → XML-RPC Tuesday, March 10, 2009
  207. 207. XML-RPC: Format Advanced Interop → XML-RPC Tuesday, March 10, 2009
  208. 208. XML-RPC: Format <methodCall> <methodName> sandwich.makeMeOne </methodName> <params> <param> <value> <string>ham and swiss</string> </value> </param> <params> </methodCall> Advanced Interop → XML-RPC Tuesday, March 10, 2009
  209. 209. XML-RPC: Customizing Advanced Interop → XML-RPC Tuesday, March 10, 2009
  210. 210. XML-RPC: Customizing hook_xmlrpc() Advanced Interop → XML-RPC Tuesday, March 10, 2009
  211. 211. XML-RPC: Customizing hook_xmlrpc() Map exposed methods & parameters Advanced Interop → XML-RPC Tuesday, March 10, 2009
  212. 212. XML-RPC: Customizing hook_xmlrpc() Map exposed methods & parameters Write those methods in straight Drupal Advanced Interop → XML-RPC Tuesday, March 10, 2009
  213. 213. XML-RPC: Customizing hook_xmlrpc() Map exposed methods & parameters Write those methods in straight Drupal Encoding is taken care of for you Advanced Interop → XML-RPC Tuesday, March 10, 2009
  214. 214. XML-RPC: The Work Advanced Interop → XML-RPC Tuesday, March 10, 2009
  215. 215. XML-RPC: The Work function sandwich_make($type) { switch ($type) { case ‘ham and swiss’: /** * sandwich making code goes here */ break; } return TRUE; } Advanced Interop → XML-RPC Tuesday, March 10, 2009
  216. 216. XML-RPC: Mapping Advanced Interop → XML-RPC Tuesday, March 10, 2009
  217. 217. XML-RPC: Mapping function sandwich_xmlrpc() { return array( array( ‘sandwich.makeMeOne’, ‘sandwich_make’, array( ‘boolean’, ‘string’, ), t(‘Drupal sandwich factory’), ), ); } Advanced Interop → XML-RPC Tuesday, March 10, 2009
  218. 218. XML-RPC: Mapping function sandwich_xmlrpc() { return array( RPC method name array( ‘sandwich.makeMeOne’, ‘sandwich_make’, array( ‘boolean’, ‘string’, ), t(‘Drupal sandwich factory’), ), ); } Advanced Interop → XML-RPC Tuesday, March 10, 2009
  219. 219. XML-RPC: Mapping function sandwich_xmlrpc() { return array( RPC method name array( ‘sandwich.makeMeOne’, Module function name ‘sandwich_make’, array( ‘boolean’, ‘string’, ), t(‘Drupal sandwich factory’), ), ); } Advanced Interop → XML-RPC Tuesday, March 10, 2009
  220. 220. XML-RPC: Mapping function sandwich_xmlrpc() { return array( RPC method name array( ‘sandwich.makeMeOne’, Module function name ‘sandwich_make’, array( Module function return type ‘boolean’, ‘string’, ), t(‘Drupal sandwich factory’), ), ); } Advanced Interop → XML-RPC Tuesday, March 10, 2009
  221. 221. XML-RPC: Mapping function sandwich_xmlrpc() { return array( RPC method name array( ‘sandwich.makeMeOne’, Module function name ‘sandwich_make’, array( Module function return type ‘boolean’, ‘string’, Module function argument type(s) ), t(‘Drupal sandwich factory’), ), ); } Advanced Interop → XML-RPC Tuesday, March 10, 2009
  222. 222. Services Advanced Interop → Services Tuesday, March 10, 2009
  223. 223. Services Works similarly to core’s XML-RPC Advanced Interop → Services Tuesday, March 10, 2009
  224. 224. Services Works similarly to core’s XML-RPC Extends the basic concept in several key ways Advanced Interop → Services Tuesday, March 10, 2009
  225. 225. Services Works similarly to core’s XML-RPC Extends the basic concept in several key ways Pluggable server backends Advanced Interop → Services Tuesday, March 10, 2009
  226. 226. Services Works similarly to core’s XML-RPC Extends the basic concept in several key ways Pluggable server backends Comes with XML-RPC using hook_xmlrpc() Advanced Interop → Services Tuesday, March 10, 2009
  227. 227. Services Works similarly to core’s XML-RPC Extends the basic concept in several key ways Pluggable server backends Comes with XML-RPC using hook_xmlrpc() Modules exist for SOAP, REST, JSON Advanced Interop → Services Tuesday, March 10, 2009
  228. 228. Services Works similarly to core’s XML-RPC Extends the basic concept in several key ways Pluggable server backends Comes with XML-RPC using hook_xmlrpc() Modules exist for SOAP, REST, JSON Pluggable data libraries Advanced Interop → Services Tuesday, March 10, 2009
  229. 229. Services Works similarly to core’s XML-RPC Extends the basic concept in several key ways Pluggable server backends Comes with XML-RPC using hook_xmlrpc() Modules exist for SOAP, REST, JSON Pluggable data libraries Introspection tool (web service browser/tester) Advanced Interop → Services Tuesday, March 10, 2009
  230. 230. Services Works similarly to core’s XML-RPC Extends the basic concept in several key ways Pluggable server backends Comes with XML-RPC using hook_xmlrpc() Modules exist for SOAP, REST, JSON Pluggable data libraries Introspection tool (web service browser/tester) API key support Advanced Interop → Services Tuesday, March 10, 2009
  231. 231. Services: Libraries Advanced Interop → Services Tuesday, March 10, 2009
  232. 232. Services: Libraries Get file info or by node Advanced Interop → Services Tuesday, March 10, 2009
  233. 233. Services: Libraries Get file info or by node Get menu trees Advanced Interop → Services Tuesday, March 10, 2009
  234. 234. Services: Libraries Get file info or by node Get menu trees Get/save/delete nodes Advanced Interop → Services Tuesday, March 10, 2009
  235. 235. Services: Libraries Get file info or by node Get menu trees Get/save/delete nodes Search nodes & users Advanced Interop → Services Tuesday, March 10, 2009
  236. 236. Services: Libraries Get file info or by node Get menu trees Get/save/delete nodes Search nodes & users Get system variables & modules; send email Advanced Interop → Services Tuesday, March 10, 2009
  237. 237. Services: Libraries Get file info or by node Get menu trees Get/save/delete nodes Search nodes & users Get system variables & modules; send email Get taxonomy trees & nodes Advanced Interop → Services Tuesday, March 10, 2009
  238. 238. Services: Libraries Get file info or by node Get menu trees Get/save/delete nodes Search nodes & users Get system variables & modules; send email Get taxonomy trees & nodes Get/delete/login/logout/save user Advanced Interop → Services Tuesday, March 10, 2009
  239. 239. Services: Libraries Get file info or by node Get menu trees Get/save/delete nodes Search nodes & users Get system variables & modules; send email Get taxonomy trees & nodes Get/delete/login/logout/save user Get/import/export views Advanced Interop → Services Tuesday, March 10, 2009
  240. 240. Services: Example Advanced Interop → Services Tuesday, March 10, 2009
  241. 241. Services: Example Send HTTP POST to /services/json Advanced Interop → Services Tuesday, March 10, 2009
  242. 242. Services: Example Send HTTP POST to /services/json method: search.nodes Advanced Interop → Services Tuesday, March 10, 2009
  243. 243. Services: Example Send HTTP POST to /services/json method: search.nodes search keys: foo bar Advanced Interop → Services Tuesday, March 10, 2009
  244. 244. Services: Example Send HTTP POST to /services/json method: search.nodes search keys: foo bar Get back JSON data Advanced Interop → Services Tuesday, March 10, 2009
  245. 245. Services: Example Send HTTP POST to /services/json method: search.nodes search keys: foo bar Get back JSON data Array of node objects matching search Advanced Interop → Services Tuesday, March 10, 2009
  246. 246. Other Talks This Week Tuesday, March 10, 2009
  247. 247. Other Talks This Week Using SMS For Data Communicating Data Collection Online: Data Visualizations and The Future of Files and Opening Data Media in Drupal 7 Flash CMS: Drupal as Media Mover: File an Adobe Flex Backend Processing and Storage Promiscuous Drupal: Building Your Site With Mailing Strategies For Web APIs Drupal Tuesday, March 10, 2009
  248. 248. Conclusions Tuesday, March 10, 2009
  249. 249. Conclusions Tuesday, March 10, 2009
  250. 250. Conclusions Drupal is ready for integration now Tuesday, March 10, 2009
  251. 251. Conclusions Drupal is ready for integration now Rich toolset for social sites + remote clients Tuesday, March 10, 2009
  252. 252. Conclusions Drupal is ready for integration now Rich toolset for social sites + remote clients There are many ways to extend existing integration Tuesday, March 10, 2009
  253. 253. Resources Tuesday, March 10, 2009
  254. 254. Resources Tuesday, March 10, 2009
  255. 255. Resources http://codesorcery.net/dcdc Tuesday, March 10, 2009
  256. 256. Resources http://codesorcery.net/dcdc Will contain these slides Tuesday, March 10, 2009
  257. 257. Resources http://codesorcery.net/dcdc Will contain these slides Will have full list of modules mentioned today Tuesday, March 10, 2009
  258. 258. Resources http://codesorcery.net/dcdc Will contain these slides Will have full list of modules mentioned today How to reach me Tuesday, March 10, 2009
  259. 259. Resources http://codesorcery.net/dcdc Will contain these slides Will have full list of modules mentioned today How to reach me Twitter: incanus77 Tuesday, March 10, 2009
  260. 260. Resources http://codesorcery.net/dcdc Will contain these slides Will have full list of modules mentioned today How to reach me Twitter: incanus77 Q&A Tuesday, March 10, 2009

×