SlideShare a Scribd company logo
1 of 31
An introduction to consuming remote APIs Pacific Northwest Drupal Summit 10/16/2011 Joshua Kopel Partner, Number 10 Web Company CTO/Co-founder, Squigaloo LLC Twitter:jkopel d.o:jkopel
An introduction to consuming remote APIs General overview and terms A simple example More complex considerations Do’s and Don’ts Tools and resources
Today We are talking specifically about RESTful interaction berween Drupal (7) and remote web services over HTTP using JSON, XML, or a variety of other languages.
RESTful? REpresentational State Transfer Client / Server Stateless HTTP methods There is also SOAP which is useful for transactional or sensitive information.
Remote APIs as: Information sources Wunderground Twitter Media sources Flickr YouTube Services Google Charts SalesForce Storage Amazon S3 Google Cloud Storage
The Drupal way Pro Write minimal code! Feeds, Rules, Entities Easily modified Fully integrated with the rest of Drupal Con Difficult to manage complex interactions Implementation scattered across modules Performance challenges
The coder way Pro Write fast code Build a useful API for other modules Manage complex interactions in code Con Must expose data in order to integrate Overhead, maintenance, security, updates
Be flexible Look for easy wins Use modules where possible  Investigate the tradeoffs
CommonCraft
CommonCraft Recurly for recurring subscription payments Wistia as video CDN
Basic flow Format a request URI that references a resource and provides parameters.  Send request using http method (POST, GET, DELETE, etc). Decode response and pass to appropriate consumer. Remote API Process request, format a response, and define a status. Check authentication and accept request.
Simple API example GET https://api.wistia.com/v1/projects.json Returns a list of all projects
Fomatted URL GET https://user:password@api.wistia.com/v1/ projects.json?sort_by=created&sort_direction=0 https://user:password@api.wistia.com/v1 secured URL projects resource .json language ?sort_by=created&sort_direction=0  Url encoded list of parameters Returns a list of all projects sorted by creation date in descending order
Basic code $query = array('sort_by' => 'created', 'sort_direction' => 0); $options = array('query' => $query, 'https' => TRUE); $url = url('https://usr:pass@api.wistia.com/v1/projects.json', $options); $options = array('method'=>'GET'); $result = drupal_http_request($url, $options); $json = json_decode($result->data); -or- $xml = simplexml_load_string ($result);
Now what? Store Entity Table Display As part of node or page Dynamically with js
Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
Security $url = url('https://api:H7gd7n2yV9opM@ api.wistia.com/… SSL http basic authorization Domain keys/subdomains OAuth
Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
Low level communication Standard functions to: Format URL(s) Format headers & http method Format query strings Request data Read http status Perform error checking on inbound data
Sending data Usually uses the POST method Build an array of encoded parameters Serialize binary data - base64_encode() $headers = array('Content-Type' => 'application/x-www-form-urlencoded') $query = drupal_http_build_query(array('name' => $name)); $options = array(‘headers'=>$headers, 'method'=>‘POST', 'data'=>$query); $result = drupal_http_request($url, $options);
Sending LOTS of data Files can be sent and retrieved using stream wrappers. Wraps a remote API and creates an addressable protocol (i.e. youtube://) It is a whole other session.
Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
API methods Map the remote API to what your module needs. Parse decoded data and return only what is needed. Format data for transfer to remote API. Return meaningful error messages based upon context.
Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
Consuming Code AKA “business logic” Use hooks to trigger calls to the remote. Format results for display or storage. Caching Permissions
When to act On demand hook_nnnnn_presave() hook_nnnnn_load() hook_nnnnn_view() Ajax (menu) callback Rule action Scheduled hook_cron()
Things go wrong drupal_http_request is synchronous Use reasonable timeout values Cache if you can Remote API
Play nice Don’t pound their servers Cache if you can Follow the rules Find the communities and join in
Useful tools Debugger Xdebug http headers “sniffer” Live http headers extension (FF) HTTP Headers (chrome) A reverse proxy / http monitor Charles (http://www.charlesproxy.com/) HttpFox (FF)
Thanks! http://www.number10webcompany.com Joshua Kopel Partner, Number 10 Web Company CTO/Co-founder, Squigaloo LLC Twitter:jkopel d.o:jkopel

More Related Content

What's hot

ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web APIhabib_786
 
Very Brief Intro to Catalyst
Very Brief Intro to CatalystVery Brief Intro to Catalyst
Very Brief Intro to CatalystZachary Blair
 
Introduction to REST and the Restlet Framework
Introduction to REST and the Restlet FrameworkIntroduction to REST and the Restlet Framework
Introduction to REST and the Restlet FrameworkPhilip Johnson
 
From Open Source to Open API with Restlet
From Open Source to Open API with RestletFrom Open Source to Open API with Restlet
From Open Source to Open API with RestletRestlet
 
Calling database with groovy in mule
Calling database with groovy in muleCalling database with groovy in mule
Calling database with groovy in muleAnirban Sen Chowdhary
 
ASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiTiago Knoch
 
SPFx Webinar Loading SharePoint data in a SPFx Webpart
SPFx Webinar Loading SharePoint data in a SPFx WebpartSPFx Webinar Loading SharePoint data in a SPFx Webpart
SPFx Webinar Loading SharePoint data in a SPFx WebpartJenkins NS
 
RESTful Web Services and Drupal
RESTful Web Services and DrupalRESTful Web Services and Drupal
RESTful Web Services and DrupalGreg Hines
 
RESTFul Web Services - Intro
RESTFul Web Services - IntroRESTFul Web Services - Intro
RESTFul Web Services - IntroManuel Correa
 
CakeFest 2013 - A-Z REST APIs
CakeFest 2013 - A-Z REST APIsCakeFest 2013 - A-Z REST APIs
CakeFest 2013 - A-Z REST APIsanthony_putignano
 
Running ms sql stored procedures in mule
Running ms sql stored procedures in muleRunning ms sql stored procedures in mule
Running ms sql stored procedures in muleAnilKumar Etagowni
 
The Full Power of ASP.NET Web API
The Full Power of ASP.NET Web APIThe Full Power of ASP.NET Web API
The Full Power of ASP.NET Web APIEyal Vardi
 
Building RESTfull Data Services with WebAPI
Building RESTfull Data Services with WebAPIBuilding RESTfull Data Services with WebAPI
Building RESTfull Data Services with WebAPIGert Drapers
 

What's hot (20)

RESTEasy
RESTEasyRESTEasy
RESTEasy
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Very Brief Intro to Catalyst
Very Brief Intro to CatalystVery Brief Intro to Catalyst
Very Brief Intro to Catalyst
 
Introduction to REST and the Restlet Framework
Introduction to REST and the Restlet FrameworkIntroduction to REST and the Restlet Framework
Introduction to REST and the Restlet Framework
 
ASP.NET WEB API
ASP.NET WEB APIASP.NET WEB API
ASP.NET WEB API
 
Rest web services
Rest web servicesRest web services
Rest web services
 
From Open Source to Open API with Restlet
From Open Source to Open API with RestletFrom Open Source to Open API with Restlet
From Open Source to Open API with Restlet
 
Calling database with groovy in mule
Calling database with groovy in muleCalling database with groovy in mule
Calling database with groovy in mule
 
ASP.NET Mvc 4 web api
ASP.NET Mvc 4 web apiASP.NET Mvc 4 web api
ASP.NET Mvc 4 web api
 
SPFx Webinar Loading SharePoint data in a SPFx Webpart
SPFx Webinar Loading SharePoint data in a SPFx WebpartSPFx Webinar Loading SharePoint data in a SPFx Webpart
SPFx Webinar Loading SharePoint data in a SPFx Webpart
 
RESTful Web Services and Drupal
RESTful Web Services and DrupalRESTful Web Services and Drupal
RESTful Web Services and Drupal
 
CakePHP REST Plugin
CakePHP REST PluginCakePHP REST Plugin
CakePHP REST Plugin
 
REST & RESTful Web Services
REST & RESTful Web ServicesREST & RESTful Web Services
REST & RESTful Web Services
 
RESTFul Web Services - Intro
RESTFul Web Services - IntroRESTFul Web Services - Intro
RESTFul Web Services - Intro
 
CakeFest 2013 - A-Z REST APIs
CakeFest 2013 - A-Z REST APIsCakeFest 2013 - A-Z REST APIs
CakeFest 2013 - A-Z REST APIs
 
Running ms sql stored procedures in mule
Running ms sql stored procedures in muleRunning ms sql stored procedures in mule
Running ms sql stored procedures in mule
 
Excellent rest using asp.net web api
Excellent rest using asp.net web apiExcellent rest using asp.net web api
Excellent rest using asp.net web api
 
Captcha
CaptchaCaptcha
Captcha
 
The Full Power of ASP.NET Web API
The Full Power of ASP.NET Web APIThe Full Power of ASP.NET Web API
The Full Power of ASP.NET Web API
 
Building RESTfull Data Services with WebAPI
Building RESTfull Data Services with WebAPIBuilding RESTfull Data Services with WebAPI
Building RESTfull Data Services with WebAPI
 

Similar to An introduction to consuming remote APIs with Drupal 7

JavaOne 2009 - TS-5276 - RESTful Protocol Buffers
JavaOne 2009 - TS-5276 - RESTful  Protocol BuffersJavaOne 2009 - TS-5276 - RESTful  Protocol Buffers
JavaOne 2009 - TS-5276 - RESTful Protocol BuffersMatt O'Keefe
 
Seattle StrongLoop Node.js Workshop
Seattle StrongLoop Node.js WorkshopSeattle StrongLoop Node.js Workshop
Seattle StrongLoop Node.js WorkshopJimmy Guerrero
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web DevelopmentRobert J. Stein
 
Understanding and Using Rest APIs (SocialDevCamp Chicago 2009)
Understanding and Using Rest APIs (SocialDevCamp Chicago 2009)Understanding and Using Rest APIs (SocialDevCamp Chicago 2009)
Understanding and Using Rest APIs (SocialDevCamp Chicago 2009)Pete Morano
 
Ipedo Company Overview
Ipedo Company OverviewIpedo Company Overview
Ipedo Company OverviewTim_Matthews
 
Document Databases & RavenDB
Document Databases & RavenDBDocument Databases & RavenDB
Document Databases & RavenDBBrian Ritchie
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaYevgeniy Brikman
 
Building social and RESTful frameworks
Building social and RESTful frameworksBuilding social and RESTful frameworks
Building social and RESTful frameworksbrendonschwartz
 
Introducing SOA and Oracle SOA Suite 11g for Database Professionals
Introducing SOA and Oracle SOA Suite 11g for Database ProfessionalsIntroducing SOA and Oracle SOA Suite 11g for Database Professionals
Introducing SOA and Oracle SOA Suite 11g for Database ProfessionalsLucas Jellema
 
Dave Orchard - Offline Web Apps with HTML5
Dave Orchard - Offline Web Apps with HTML5Dave Orchard - Offline Web Apps with HTML5
Dave Orchard - Offline Web Apps with HTML5Web Directions
 
The Django Web Application Framework
The Django Web Application FrameworkThe Django Web Application Framework
The Django Web Application FrameworkSimon Willison
 
OWASP Portland - OWASP Top 10 For JavaScript Developers
OWASP Portland - OWASP Top 10 For JavaScript DevelopersOWASP Portland - OWASP Top 10 For JavaScript Developers
OWASP Portland - OWASP Top 10 For JavaScript DevelopersLewis Ardern
 
Web API or WCF - An Architectural Comparison
Web API or WCF - An Architectural ComparisonWeb API or WCF - An Architectural Comparison
Web API or WCF - An Architectural ComparisonAdnan Masood
 
Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Darwin Biler
 
jkljklj
jkljkljjkljklj
jkljkljhoefo
 

Similar to An introduction to consuming remote APIs with Drupal 7 (20)

JavaOne 2009 - TS-5276 - RESTful Protocol Buffers
JavaOne 2009 - TS-5276 - RESTful  Protocol BuffersJavaOne 2009 - TS-5276 - RESTful  Protocol Buffers
JavaOne 2009 - TS-5276 - RESTful Protocol Buffers
 
Seattle StrongLoop Node.js Workshop
Seattle StrongLoop Node.js WorkshopSeattle StrongLoop Node.js Workshop
Seattle StrongLoop Node.js Workshop
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web Development
 
Unerstanding and Using RESTful APIs
Unerstanding and Using RESTful APIsUnerstanding and Using RESTful APIs
Unerstanding and Using RESTful APIs
 
Understanding and Using Rest APIs (SocialDevCamp Chicago 2009)
Understanding and Using Rest APIs (SocialDevCamp Chicago 2009)Understanding and Using Rest APIs (SocialDevCamp Chicago 2009)
Understanding and Using Rest APIs (SocialDevCamp Chicago 2009)
 
Ipedo Company Overview
Ipedo Company OverviewIpedo Company Overview
Ipedo Company Overview
 
Document Databases & RavenDB
Document Databases & RavenDBDocument Databases & RavenDB
Document Databases & RavenDB
 
Codeigniter
CodeigniterCodeigniter
Codeigniter
 
Play Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and ScalaPlay Framework: async I/O with Java and Scala
Play Framework: async I/O with Java and Scala
 
Getting Started with API Management
Getting Started with API ManagementGetting Started with API Management
Getting Started with API Management
 
Woa. Reloaded
Woa. ReloadedWoa. Reloaded
Woa. Reloaded
 
Building social and RESTful frameworks
Building social and RESTful frameworksBuilding social and RESTful frameworks
Building social and RESTful frameworks
 
Introducing SOA and Oracle SOA Suite 11g for Database Professionals
Introducing SOA and Oracle SOA Suite 11g for Database ProfessionalsIntroducing SOA and Oracle SOA Suite 11g for Database Professionals
Introducing SOA and Oracle SOA Suite 11g for Database Professionals
 
Dave Orchard - Offline Web Apps with HTML5
Dave Orchard - Offline Web Apps with HTML5Dave Orchard - Offline Web Apps with HTML5
Dave Orchard - Offline Web Apps with HTML5
 
The Django Web Application Framework
The Django Web Application FrameworkThe Django Web Application Framework
The Django Web Application Framework
 
Switch to Backend 2023
Switch to Backend 2023Switch to Backend 2023
Switch to Backend 2023
 
OWASP Portland - OWASP Top 10 For JavaScript Developers
OWASP Portland - OWASP Top 10 For JavaScript DevelopersOWASP Portland - OWASP Top 10 For JavaScript Developers
OWASP Portland - OWASP Top 10 For JavaScript Developers
 
Web API or WCF - An Architectural Comparison
Web API or WCF - An Architectural ComparisonWeb API or WCF - An Architectural Comparison
Web API or WCF - An Architectural Comparison
 
Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4Building Large Scale PHP Web Applications with Laravel 4
Building Large Scale PHP Web Applications with Laravel 4
 
jkljklj
jkljkljjkljklj
jkljklj
 

Recently uploaded

Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
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
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 

Recently uploaded (20)

Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
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
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
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
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 

An introduction to consuming remote APIs with Drupal 7

  • 1. An introduction to consuming remote APIs Pacific Northwest Drupal Summit 10/16/2011 Joshua Kopel Partner, Number 10 Web Company CTO/Co-founder, Squigaloo LLC Twitter:jkopel d.o:jkopel
  • 2. An introduction to consuming remote APIs General overview and terms A simple example More complex considerations Do’s and Don’ts Tools and resources
  • 3. Today We are talking specifically about RESTful interaction berween Drupal (7) and remote web services over HTTP using JSON, XML, or a variety of other languages.
  • 4. RESTful? REpresentational State Transfer Client / Server Stateless HTTP methods There is also SOAP which is useful for transactional or sensitive information.
  • 5. Remote APIs as: Information sources Wunderground Twitter Media sources Flickr YouTube Services Google Charts SalesForce Storage Amazon S3 Google Cloud Storage
  • 6. The Drupal way Pro Write minimal code! Feeds, Rules, Entities Easily modified Fully integrated with the rest of Drupal Con Difficult to manage complex interactions Implementation scattered across modules Performance challenges
  • 7. The coder way Pro Write fast code Build a useful API for other modules Manage complex interactions in code Con Must expose data in order to integrate Overhead, maintenance, security, updates
  • 8. Be flexible Look for easy wins Use modules where possible Investigate the tradeoffs
  • 10. CommonCraft Recurly for recurring subscription payments Wistia as video CDN
  • 11. Basic flow Format a request URI that references a resource and provides parameters. Send request using http method (POST, GET, DELETE, etc). Decode response and pass to appropriate consumer. Remote API Process request, format a response, and define a status. Check authentication and accept request.
  • 12. Simple API example GET https://api.wistia.com/v1/projects.json Returns a list of all projects
  • 13. Fomatted URL GET https://user:password@api.wistia.com/v1/ projects.json?sort_by=created&sort_direction=0 https://user:password@api.wistia.com/v1 secured URL projects resource .json language ?sort_by=created&sort_direction=0 Url encoded list of parameters Returns a list of all projects sorted by creation date in descending order
  • 14. Basic code $query = array('sort_by' => 'created', 'sort_direction' => 0); $options = array('query' => $query, 'https' => TRUE); $url = url('https://usr:pass@api.wistia.com/v1/projects.json', $options); $options = array('method'=>'GET'); $result = drupal_http_request($url, $options); $json = json_decode($result->data); -or- $xml = simplexml_load_string ($result);
  • 15. Now what? Store Entity Table Display As part of node or page Dynamically with js
  • 16. Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
  • 17. Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
  • 18. Security $url = url('https://api:H7gd7n2yV9opM@ api.wistia.com/… SSL http basic authorization Domain keys/subdomains OAuth
  • 19. Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
  • 20. Low level communication Standard functions to: Format URL(s) Format headers & http method Format query strings Request data Read http status Perform error checking on inbound data
  • 21. Sending data Usually uses the POST method Build an array of encoded parameters Serialize binary data - base64_encode() $headers = array('Content-Type' => 'application/x-www-form-urlencoded') $query = drupal_http_build_query(array('name' => $name)); $options = array(‘headers'=>$headers, 'method'=>‘POST', 'data'=>$query); $result = drupal_http_request($url, $options);
  • 22. Sending LOTS of data Files can be sent and retrieved using stream wrappers. Wraps a remote API and creates an addressable protocol (i.e. youtube://) It is a whole other session.
  • 23. Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
  • 24. API methods Map the remote API to what your module needs. Parse decoded data and return only what is needed. Format data for transfer to remote API. Return meaningful error messages based upon context.
  • 25. Building blocks Consuming code (module hooks) Admin configuration API methods Security info in variables Low level comm. Remote API
  • 26. Consuming Code AKA “business logic” Use hooks to trigger calls to the remote. Format results for display or storage. Caching Permissions
  • 27. When to act On demand hook_nnnnn_presave() hook_nnnnn_load() hook_nnnnn_view() Ajax (menu) callback Rule action Scheduled hook_cron()
  • 28. Things go wrong drupal_http_request is synchronous Use reasonable timeout values Cache if you can Remote API
  • 29. Play nice Don’t pound their servers Cache if you can Follow the rules Find the communities and join in
  • 30. Useful tools Debugger Xdebug http headers “sniffer” Live http headers extension (FF) HTTP Headers (chrome) A reverse proxy / http monitor Charles (http://www.charlesproxy.com/) HttpFox (FF)
  • 31. Thanks! http://www.number10webcompany.com Joshua Kopel Partner, Number 10 Web Company CTO/Co-founder, Squigaloo LLC Twitter:jkopel d.o:jkopel

Editor's Notes

  1. They will make you smarterThey will get your work done for youThey will bring you beer