55
Advanced Web Services with JSON API

JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

  • Upload
    voquynh

  • View
    225

  • Download
    1

Embed Size (px)

Citation preview

Page 1: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Advanced Web Services with

JSON API

Page 2: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

HOWDY!I am MateuI am here because I am a decoupling nerdYou can find me at @e0ipso

Page 3: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s
Page 4: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Outstanding problemsStill looking for solutions!

JSON APIWhat is it?Why use it?

You will learn about…

Drupal moduleWhat’s the status?What are the limitations?How does it relate to REST in core?

Page 5: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

{json:api} paints your bike shed

Page 6: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Defines:- Transport- Interaction

Page 7: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Creative Commons specification

Strongly driven by FE & UX expertsSteve Klabnik, Yehuda Katz, Dan Gebhardt, Tyler Kellen, Ethan Resnick

Page 8: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Why this one?Since there are others, and a HAL implementation is already in core. And GraphQL in contrib.

Page 9: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

141 reposThat’s a lot of traction

Client & ServerTotal success!

18 languagesAnd a lot of range

Page 10: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Place your screenshot here

Page 11: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

With a highlight on its flexibilityStays neutral on implementation details and gives you space. Also provides extension system.

Page 12: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s
Page 13: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

HOW DID I GET HERE?

Page 14: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Response to the typical problems

› Multiple round trip requests› Bloated responses› Content discovery

They all have known solid solutions!

Page 15: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

1.TRANSPORT

FORMATThe shape of the JSON object

Page 16: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

FORMAT

SupportingStructure

(GLUE)

Resource dataInfo(ID)

Attributes&

Relationships(DATA)

HATEOAS&

Metadata(HYPERMEDIA)

Page 17: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

{“data”: {

“type”: “articles”,“id”: “1”,“attributes”: {…},“relationships”: {…},

},“links”: {…},“meta”: {…}

} FORMAT

Page 18: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

{…

“attributes”: {“title”: “Drupal 8!”,“body”: “Lorem ipsum”…

},…

}FORMAT

Page 19: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

“relationships”: {

“links”: {

“self”: “articles/1/relationships”

},

“tags”: {

“data”: [{

“type”: “tags”,

“id”: “2”

}]

}

… FORMAT

Page 20: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

2.RESOURCE

INTERACTIONHow do we get and update data

Page 21: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Uses RESTGET, POST, PUT, PATCH, DELETE, …

Page 22: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Typical request

GET /articles HTTP/1.1Accept: application/vnd.api+json

RESPONSE/jsonapi/node/article

Page 23: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Response to the typical problems

› Multiple round trip requests› Bloated responses› Content discovery

They all have known solid solutions!

Page 24: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

The typical solutions

› Multiple round trip requests› Resource embedding

› Bloated responses› Sparse fieldsets

› Content discovery› Collections and filters

Page 25: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Place your screenshot here

EXTREMELY SIMPLEYour project will have way more stuff than this!

Page 26: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

› 1: GET articles/12› 2: GET articles/12 => tags/34› 3: GET articles/12 => tags/88› 4: GET articles/12 => users/88› 5: GET articles/12 => users/88 => images/5› 6: GET articles/12/comments› 7: GET articles/12 => comment/2› 8: GET articles/12 => comment/2 => user/8› 9: GET articles/12 => comment/2 =>

user/8 => image/9› 10: GET articles/12 => comment/7 […] › 11: GET articles/12 => comment/7 […]› 12: GET articles/12 => comment/7 […]› MORE!

Page 27: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

GET /articles/12?

include= author,author.pic, tags, comment,comment.author, comment.author.pic

Resource embedding

Page 28: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

GET /articles/12?

fields[articles]= title, created

Sparse fieldsets

Page 29: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

…“attributes”: { “title”: “My article”, “uuid”: “12345-1234-34”, “created”: “10-05-2012”, “status”: “1”, “body”: {…}, “langcode”: “en”}…

Page 30: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

“Give me the cover image and the publication year of all the albums of all the bands having one of the members

under 35 currently living in Murcia.

Oh! And while you're at it, output the name of the band and that member as

well.”

Page 31: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

GET /bands?

filter[members.city][value]=Murcia&

filter[members.age][value]=35&

filter[members.age][operator]=”<=”&

include=albums,albums.cover,members&

fields[bands]=name,albums,members&

fields[members]=name&

fields[albums]=publication&

fields[images]=uriCollections and filters

Page 32: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Every API consumer requests the resource data it needs. It can be different every time.

WRITEURL QUERIES

Page 33: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Every consumer has different data needs. The server (Drupal) cannot choose what those are.

Page 34: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

1. /bands/1234› GET, PUT, PATCH, DELETE

2. /bands› GET, POST

3. /bands/1234/albums› GET

4. /bands/1234/relationships/albums› GET, PATCH

Every resource 4 “endpoints”

Page 35: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

3.PERFORMANCE

How fast is the Drupal module?

Page 36: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Benchmarking JSON API

› ab -v4 -k -c8 -n10 -A u:p› node:2100› include

› Author› Author image

› Tags (2 tags)

Page 37: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Benchmarking core HAL JSON

› ab -v4 -k -c8 -n10 -A u:p› node:2100› user:1105› file:156 (slow path)

› tag:11› tag:18

Page 38: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Results (core): anonymous

user:1105node:2100

file:156tag:11tag:18

~ 21 ms

Using Keep Alive

Page 39: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Results (jsonapi): anonymous

user:1105

node:2100

file:156

tag:11

tag:18

~ 7 ms

node:2100 include:author,author.pic,tags

Page 40: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Core (ms) {json:api} (ms)

Anonymous 21 7

Auth 320 115

Uncached 392 182

https://gist.github.com/e0ipso/4b1b346b296fbf0c918450fef5b0b3d7

Page 41: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

AVOIDBOOTSTRAPSAnd unnecessary HTTP round trips.

Page 42: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

4.DRUPAL MODULE

Our implementation of the standard.

Page 43: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

drupal.org/project/jsonapiThat was expected, wasn’t it?

Page 44: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Drupal Integration

› Zero configuration› Integrates with Authentication Providers

› OAuth 2 Bearer Token (via simple_oauth)› Tied to the entity system

› Content› Config

› Full cacheability metadata support› Great tandem with computed fields

Page 45: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Oriented to entity bundles

› Each resource is a bundle (content type)› /jsonapi/node/page› Automatically enabled (can be disabled)› You can do any entity query as filter

Page 46: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Automatic schema generation

› Separate contrib: Schemata› drupal.org/project/schemata

› Uses type data to generate the schema› /schemata/node/page ?_format=schema_json &_describes=api_json

Page 47: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Schema usages?GENERATE DOCS

drupal.org/project/docson

Page 48: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Schema usages?GENERATE FORMS

Page 49: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Schema usages?VALIDATE DATA

Page 50: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Schema usages?GENERATE CODE

Page 51: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Limitations

› File integration needs some work› Extensible through code only› Limited to the entity system

Page 52: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Open challenges

› Consumer routing based on path alias› Responsive images and image styles› Versioning content model in Drupal› Multiple-operation requests

› drupal.org/project/subrequests› Data pre-processing on client request› Aggregated values

› DISTINCT, SUM, AVERAGE, MAX, …

Page 53: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Join us for contribution sprints!Friday, April 28, 2017

First-Time Sprinter Workshop

9:00am-12:00pmRoom: 307-308

Mentored CoreSprint

9:00am-12:00pmRoom:301-303

General Sprints

9:00am-6:00pmRoom:309-310

Page 54: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Credits

Special thanks to all the people who made and released these awesome resources for free:› Presentation template by SlidesCarnival› Photographs by Startupstockphotos› Creative Commons images

Page 55: JSON API Services with Advanced Web - Drupal Web... · Outstanding problems Still looking for solutions! JSON API What is it? Why use it? You will learn about… Drupal module What’s

Evaluate this sessionevents.drupal.org/baltimore2017/schedule

What did you think?

https://events.drupal.org/node/add/session-evaluation?field_eval_session=16900