build a restfull app using drupal

Post on 08-May-2015

256 Views

Category:

Internet

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Presentation about how to build an API for your drupal CMS

TRANSCRIPT

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 Guzzle\Http\Client;

$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 Guzzle\Http\Client;

$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 Guzzle\Http\Client;

$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 Guzzle\Http\Client;

$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 Guzzle\Http\Client;

$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 Guzzle\Http\Client;

$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. Hurtado Villegas www.twitter.com/aspgems

www.twitter.com/alvar0hurtad0

top related