MAY 29 & 30, 2014
Barcelona
@alvar0hurtad0
Drupal’s API
SO
SO
SO
SO +18
W
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
7 8
7 8
IM
7 8
IM
• MULTILINGUAL
• UX/ADMINISTRATION EXPERIENCE
• MOBILE FRIENDLY
• CONFIGURATION MANAGEMENT
• WEB SERVICES
Photo: Carlos Francisco Peña
Photo: Carlos Francisco Peña
D
Photo: Carlos Francisco Peña
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 Peña
DATA MODEL
Photo: Carlos Francisco Peña
DATA MODEL
Photo: Carlos Francisco Peña
DATA MODEL
Photo: Carlos Francisco Peña
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 !!! ?¿? !!!
I’ve a question
ONE MORE
THING
THANKS
Alvaro J. HurtadoVillegas	

www.twitter.com/aspgems	

www.twitter.com/alvar0hurtad0

Build a Restfull app using drupal

  • 1.
    MAY 29 &30, 2014 Barcelona @alvar0hurtad0 Drupal’s API
  • 3.
  • 4.
  • 5.
  • 6.
  • 8.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 21.
  • 22.
  • 23.
    7 8 IM • MULTILINGUAL •UX/ADMINISTRATION EXPERIENCE • MOBILE FRIENDLY • CONFIGURATION MANAGEMENT • WEB SERVICES
  • 24.
  • 25.
  • 26.
    Photo: Carlos FranciscoPeña 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 FranciscoPeña DATA MODEL
  • 28.
    Photo: Carlos FranciscoPeña DATA MODEL
  • 29.
    Photo: Carlos FranciscoPeña DATA MODEL
  • 30.
    Photo: Carlos FranciscoPeña DATA MODEL 
 CONTENT MODELING • CONTENT TYPES • COMMENTS • USER PROFILES • COMMERCE PRODUCTS • ….
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
    SERVICES AUTHENTICATION IN CORE •HTTP basic authentication • Cookie
  • 45.
    SERVICES AUTHENTICATION IN CORE •HTTP basic authentication • Cookie CONTRIBUTED MODULE • Oauth
  • 46.
  • 47.
    SHOW ME THECODE 
 CURL curl -H "Accept: application/hal+json" --request GET http://drupal-8.localhost/node/1
  • 48.
    SHOW ME THECODE 
 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 THECODE 
 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 THECODE 
 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 THECODE 
 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.
  • 53.
  • 54.
  • 55.
    QUESTIONS !!! ?¿?!!! I’ve a question
  • 56.
  • 59.