際際滷

際際滷Share a Scribd company logo
MAY 29 & 30, 2014
Barcelona
@alvar0hurtad0
Drupals API
Build a Restfull app using drupal
SO
SO
SO
SO +18
Build a Restfull app using drupal
W
Build a Restfull app using drupal
T
Drupal sites
Dries Buytaert March 2012
~7%
CMS SITES
Dries Buytaert March 2012
30%
WEB SITES
Dries Buytaert March 2012
launch
top
deprecated
T
launch
top
deprecated
T
launch
top
deprecated
T
launch
top
deprecated
30%
WEB SITES
Dries Buytaert March 2012
Dries Buytaert March 2012
Build a Restfull app using drupal
7 8
7 8
IM
7 8
IM
 MULTILINGUAL
 UX/ADMINISTRATION EXPERIENCE
 MOBILE FRIENDLY
 CONFIGURATION MANAGEMENT
 WEB SERVICES
Photo: Carlos Francisco 永艶単温
Photo: Carlos Francisco 永艶単温
D
Photo: Carlos Francisco 永艶単温
D
 LAYOUT CLICK BY CLICK
 DATA MODEL CLICK BY CLICK
 DATABASE QUERYS CLICK BY CLICK
 TRIGGERS AND ACTIONS 
 USER PERMISSIONS 
 WEB SERVICES CLICK BY CLICK
Photo: Carlos Francisco 永艶単温
DATA MODEL
Photo: Carlos Francisco 永艶単温
DATA MODEL
Photo: Carlos Francisco 永艶単温
DATA MODEL
Photo: Carlos Francisco 永艶単温
DATA MODEL

CONTENT MODELING
 CONTENT TYPES
 COMMENTS
 USER PROFILES
 COMMERCE PRODUCTS
 .
DATABASE QUERYS CLICK BY CLICK
DATABASE QUERYS CLICK BY CLICK
DATABASE QUERYS CLICK BY CLICK
DATABASE QUERYS CLICK BY CLICK
DATABASE QUERYS CLICK BY CLICK
USER PERMISSION CLICK BY CLICK
USER PERMISSION CLICK BY CLICK
USER PERMISSION CLICK BY CLICK
USER PERMISSION CLICK BY CLICK
REST SERVICES CLICK BY CLICK
REST SERVICES CLICK BY CLICK
REST SERVICES CLICK BY CLICK
SERVICES AUTHENTICATION
SERVICES AUTHENTICATION
IN CORE
 HTTP basic authentication
 Cookie
SERVICES AUTHENTICATION
IN CORE
 HTTP basic authentication
 Cookie
CONTRIBUTED MODULE
 Oauth
SHOW ME THE CODE
SHOW ME THE CODE

CURL
curl -H "Accept: application/hal+json" --request GET
http://drupal-8.localhost/node/1
SHOW ME THE CODE

CURL
curl -H "Accept: application/hal+json" --request GET
http://drupal-8.localhost/node/1

Guzzle
<?php
use GuzzleHttpClient;
$client = new Client('http://drupal-8.localhost');
// If in a Drupal environment use the HTTP client service.
$client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost');
$request = $client->get('node/1');
$request->addHeader('Accept', 'application/hal+json');
$response = $request->send()->json();
print_r($response);
?>
SHOW ME THE CODE

CURL
curl -H "Accept: application/hal+json" --request GET
http://drupal-8.localhost/node/1

Guzzle
<?php
use GuzzleHttpClient;
$client = new Client('http://drupal-8.localhost');
// If in a Drupal environment use the HTTP client service.
$client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost');
$request = $client->get('node/1');
$request->addHeader('Accept', 'application/hal+json');
$response = $request->send()->json();
print_r($response);
?>

CURL
curl --include --request POST
--user cleverFucker:secret
--header 'Content-type: application/hal+json' http://
drupal-8.localhost/entity/node
--data-binary '{"_links":{"type":{"href":"http://
drupal-8.localhost/rest/type/node/page"}}, "title":
[{"value":"APIdaysBNC"}]}'
SHOW ME THE CODE

CURL
curl -H "Accept: application/hal+json" --request GET
http://drupal-8.localhost/node/1

Guzzle
<?php
use GuzzleHttpClient;
$client = new Client('http://drupal-8.localhost');
// If in a Drupal environment use the HTTP client service.
$client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost');
$request = $client->get('node/1');
$request->addHeader('Accept', 'application/hal+json');
$response = $request->send()->json();
print_r($response);
?>

CURL
curl --include --request POST
--user cleverFucker:secret
--header 'Content-type: application/hal+json' http://
drupal-8.localhost/entity/node
--data-binary '{"_links":{"type":{"href":"http://
drupal-8.localhost/rest/type/node/page"}}, "title":
[{"value":"APIdaysBNC"}]}'

Guzzle (I)
<?php
use GuzzleHttpClient;
$client = new Client('http://drupal-8.localhost');
$client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost');
$node = array(
'_links' => array(
'type' => array(
'href' => 'http://drupal-8.localhost/rest/type/node/page'
)
),
'title' => array(0 => array('value' => 'New node title')),
);
SHOW ME THE CODE

CURL
curl -H "Accept: application/hal+json" --request GET
http://drupal-8.localhost/node/1

Guzzle
<?php
use GuzzleHttpClient;
$client = new Client('http://drupal-8.localhost');
// If in a Drupal environment use the HTTP client service.
$client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost');
$request = $client->get('node/1');
$request->addHeader('Accept', 'application/hal+json');
$response = $request->send()->json();
print_r($response);
?>

CURL
curl --include --request POST
--user cleverFucker:secret
--header 'Content-type: application/hal+json' http://
drupal-8.localhost/entity/node
--data-binary '{"_links":{"type":{"href":"http://
drupal-8.localhost/rest/type/node/page"}}, "title":
[{"value":"APIdaysBNC"}]}'

Guzzle (I)
<?php
use GuzzleHttpClient;
$client = new Client('http://drupal-8.localhost');
$client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost');
$node = array(
'_links' => array(
'type' => array(
'href' => 'http://drupal-8.localhost/rest/type/node/page'
)
),
'title' => array(0 => array('value' => 'New node title')),
);

Guzzle (II)
$data = json_encode($node);
$response = $client->post('entity/node', array(
'Content-type' => 'application/hal+json',
), $data)
// Username and password for HTTP Basic Authentication.
->setAuth('klausi', 'secret')
->send();
if ($response->getStatusCode() == 201) {
print 'Node creation successful!';
}
?>
SOAP?
SOAP?
SOAP?
QUESTIONS !!! ?多? !!!
Ive a question
ONE MORE
THING
Build a Restfull app using drupal
Build a Restfull app using drupal
THANKS
Alvaro J. HurtadoVillegas	

www.twitter.com/aspgems	

www.twitter.com/alvar0hurtad0

More Related Content

Build a Restfull app using drupal

  • 1. MAY 29 & 30, 2014 Barcelona @alvar0hurtad0 Drupals API
  • 3. SO
  • 4. SO
  • 5. SO
  • 8. W
  • 10. T
  • 21. 7 8
  • 23. 7 8 IM MULTILINGUAL UX/ADMINISTRATION EXPERIENCE MOBILE FRIENDLY CONFIGURATION MANAGEMENT WEB SERVICES
  • 24. Photo: Carlos Francisco 永艶単温
  • 25. Photo: Carlos Francisco 永艶単温 D
  • 26. Photo: Carlos Francisco 永艶単温 D LAYOUT CLICK BY CLICK DATA MODEL CLICK BY CLICK DATABASE QUERYS CLICK BY CLICK TRIGGERS AND ACTIONS USER PERMISSIONS WEB SERVICES CLICK BY CLICK
  • 27. Photo: Carlos Francisco 永艶単温 DATA MODEL
  • 28. Photo: Carlos Francisco 永艶単温 DATA MODEL
  • 29. Photo: Carlos Francisco 永艶単温 DATA MODEL
  • 30. Photo: Carlos Francisco 永艶単温 DATA MODEL CONTENT MODELING CONTENT TYPES COMMENTS USER PROFILES COMMERCE PRODUCTS .
  • 44. SERVICES AUTHENTICATION IN CORE HTTP basic authentication Cookie
  • 45. SERVICES AUTHENTICATION IN CORE HTTP basic authentication Cookie CONTRIBUTED MODULE Oauth
  • 46. SHOW ME THE CODE
  • 47. SHOW ME THE CODE CURL curl -H "Accept: application/hal+json" --request GET http://drupal-8.localhost/node/1
  • 48. SHOW ME THE CODE CURL curl -H "Accept: application/hal+json" --request GET http://drupal-8.localhost/node/1 Guzzle <?php use GuzzleHttpClient; $client = new Client('http://drupal-8.localhost'); // If in a Drupal environment use the HTTP client service. $client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost'); $request = $client->get('node/1'); $request->addHeader('Accept', 'application/hal+json'); $response = $request->send()->json(); print_r($response); ?>
  • 49. SHOW ME THE CODE CURL curl -H "Accept: application/hal+json" --request GET http://drupal-8.localhost/node/1 Guzzle <?php use GuzzleHttpClient; $client = new Client('http://drupal-8.localhost'); // If in a Drupal environment use the HTTP client service. $client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost'); $request = $client->get('node/1'); $request->addHeader('Accept', 'application/hal+json'); $response = $request->send()->json(); print_r($response); ?> CURL curl --include --request POST --user cleverFucker:secret --header 'Content-type: application/hal+json' http:// drupal-8.localhost/entity/node --data-binary '{"_links":{"type":{"href":"http:// drupal-8.localhost/rest/type/node/page"}}, "title": [{"value":"APIdaysBNC"}]}'
  • 50. SHOW ME THE CODE CURL curl -H "Accept: application/hal+json" --request GET http://drupal-8.localhost/node/1 Guzzle <?php use GuzzleHttpClient; $client = new Client('http://drupal-8.localhost'); // If in a Drupal environment use the HTTP client service. $client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost'); $request = $client->get('node/1'); $request->addHeader('Accept', 'application/hal+json'); $response = $request->send()->json(); print_r($response); ?> CURL curl --include --request POST --user cleverFucker:secret --header 'Content-type: application/hal+json' http:// drupal-8.localhost/entity/node --data-binary '{"_links":{"type":{"href":"http:// drupal-8.localhost/rest/type/node/page"}}, "title": [{"value":"APIdaysBNC"}]}' Guzzle (I) <?php use GuzzleHttpClient; $client = new Client('http://drupal-8.localhost'); $client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost'); $node = array( '_links' => array( 'type' => array( 'href' => 'http://drupal-8.localhost/rest/type/node/page' ) ), 'title' => array(0 => array('value' => 'New node title')), );
  • 51. SHOW ME THE CODE CURL curl -H "Accept: application/hal+json" --request GET http://drupal-8.localhost/node/1 Guzzle <?php use GuzzleHttpClient; $client = new Client('http://drupal-8.localhost'); // If in a Drupal environment use the HTTP client service. $client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost'); $request = $client->get('node/1'); $request->addHeader('Accept', 'application/hal+json'); $response = $request->send()->json(); print_r($response); ?> CURL curl --include --request POST --user cleverFucker:secret --header 'Content-type: application/hal+json' http:// drupal-8.localhost/entity/node --data-binary '{"_links":{"type":{"href":"http:// drupal-8.localhost/rest/type/node/page"}}, "title": [{"value":"APIdaysBNC"}]}' Guzzle (I) <?php use GuzzleHttpClient; $client = new Client('http://drupal-8.localhost'); $client = Drupal::httpClient()->setBaseUrl('http://drupal-8.localhost'); $node = array( '_links' => array( 'type' => array( 'href' => 'http://drupal-8.localhost/rest/type/node/page' ) ), 'title' => array(0 => array('value' => 'New node title')), ); Guzzle (II) $data = json_encode($node); $response = $client->post('entity/node', array( 'Content-type' => 'application/hal+json', ), $data) // Username and password for HTTP Basic Authentication. ->setAuth('klausi', 'secret') ->send(); if ($response->getStatusCode() == 201) { print 'Node creation successful!'; } ?>
  • 52. SOAP?
  • 53. SOAP?
  • 54. SOAP?
  • 55. QUESTIONS !!! ?多? !!! Ive a question