Slide 1

Slide 1 text

JSON API A SPECIFICATION FOR BUILDING APIS IN JSON PAUL MCMAHON DOORKEEPERגࣜձࣾ @PWIM

Slide 2

Slide 2 text

େ੢઱ڕళ

Slide 3

Slide 3 text

API'S ARE HARD

Slide 4

Slide 4 text

CREATING A NEW API ISN'T SOMETHING YOU DO REGULARITY

Slide 5

Slide 5 text

DIFFERENT TECHNOLOGIES MAKE DIFFERENT ASSUMPTIONS ABOUT BEST PRACTICES

Slide 6

Slide 6 text

BACKWARDS COMPATIBILITY MAKES RESTRUCTURING HARD

Slide 7

Slide 7 text

CONVENTION OVER CONFIGURATION

Slide 8

Slide 8 text

DEVELOPING AN APPLICATION INVOLVES A LOT OF DECISIONS THAT DON'T MATTER.

Slide 9

Slide 9 text

ALLOWS TO BUILD UP GENERALIZED TOOLING

Slide 10

Slide 10 text

JSON API

Slide 11

Slide 11 text

STANDARDIZES AN API'S JSON RESPONSE, SO YOU DON'T NEED TO THINK ABOUT IT

Slide 12

Slide 12 text

CLIENT LIBRARIES IN JAVASCRIPT, IOS, RUBY, PHP, PERL, JAVA, ANDROID.

Slide 13

Slide 13 text

SERVER LIBRARIES IN PHP, NODE.JS, RUBY, PYTHON, GO, .NET, JAVA, ELIXIR, PERL.

Slide 14

Slide 14 text

INITIAL DRAFT IN 2013, STABLE VERSION 1.0 IN 2015

Slide 15

Slide 15 text

BASIC EXAMPLE GET /events/42716 { "data": { "type": "events", "id": "1", "attributes": { "title": "Machida Tech Night" "starts_at": "2016-04-28T10:00:00.000Z" "ends_at": "2016-04-28T12:30:00.000Z" }, "relationships": { "data": { "type": "group", "id": "6918" } } } }

Slide 16

Slide 16 text

SPARE FIELDSETS & RELATIONSHIPS GET /events/42716?include=group { "data": { "type": "events", "id": "1", "attributes": { "title": "ୈ3ճ Machida Tech Night" }, "relationships": { "data": { "type": "group", "id": "6918" } } }, "included": [ { "type": "group", "id": "6918", "attributes": { "name": "Machida Tech Night" } ] }

Slide 17

Slide 17 text

PAGINATION & FILTERING GET /events?filter[title]=Machida&page[number]=2&page[size]=1 { "meta": { "total-pages": 3 }, "data": [{ "type": "events", "id": "1", "attributes": { "title": "ୈ3ճ Machida Tech Night" }, "relationships": { "data": { "type": "group", "id": "6918" } } }], "links": { "self": "https://api.doorkeeper.jp/events?filter[title]=Machida&page[number]=2&page[size]=1", "first": "https://api.doorkeeper.jp/events?filter[title]=Machida&page[number]=1&page[size]=1", "prev": "https://api.doorkeeper.jp/events?filter[title]=Machida&page[number]=1&page[size]=1", "next": "https://api.doorkeeper.jp/events?filter[title]=Machida&page[number]=3&page[size]=1", "last": "https://api.doorkeeper.jp/events?filter[title]=Machida&page[number]=3&page[size]=1" } }

Slide 18

Slide 18 text

RESOURCES > http://jsonapi.org/ > https://github.com/rails-api/ active_model_serializers > http://emberjs.com/