Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introducing JSON API

Introducing JSON API

An introduction to JSON API, the standard for building JSON-based APIs. Presented at the NH Full Stack meetup in Portsmouth, NH.

Avatar for Dan Gebhardt

Dan Gebhardt

March 25, 2015
Tweet

More Decks by Dan Gebhardt

Other Decks in Programming

Transcript

  1. HISTORY • 2013-05-03 - Initial draft release • 2013-07-22 -

    Media type registration • 2014-07-04 - 1.0 RC1 • 2015-02-18 - 1.0 RC2 • 2015-03-16 - 1.0 RC3 • 2015-04-?? - 1.0
  2. MEDIA TYPE {! "data": [{! "type": "articles",! "id": "1",! "title":

    "JSON API paints my bikeshed!"! }, {! "type": "articles",! "id": "2",! "title": "JSON API 1.0 - An epic trilogy"! }]! }!
  3. MEDIA TYPE {! "data": {! "type": "articles",! "id": "1",! "title":

    "JSON API paints my bikeshed!",! "links": {! "self": "http://example.com/articles/1",! "author": {! "self": "http://example.com/articles/1/links/author",! "related": "http://example.com/articles/1/author"! },! "comments": {! "self": "http://example.com/articles/1/links/comments",! "related": "http://example.com/articles/1/comments"! }! }! }! }!
  4. MEDIA TYPE {! "data": {! "type": "articles",! "id": "1",! "title":

    "JSON API paints my bikeshed!",! "links": {! "self": "http://example.com/articles/1",! "author": {! "self": "http://example.com/articles/1/links/author",! "related": "http://example.com/articles/1/author",! "linkage": { "type": "people", "id": "9" }! },! }! },! "included": [{! "type": "people",! "id": "9",! "name": "dgeb"! }]! }
  5. MEDIA TYPE {! "meta": {! "copyright": "Copyright 2015 Example Corp.",!

    "authors": [! "Yehuda Katz",! "Steve Klabnik",! "Dan Gebhardt"! ]! },! "data": {! // ...! }! }! !
  6. HTTP RULES • GET - Fetching resources • POST -

    Creating resources • PATCH - Updating resources • DELETE - Deleting resources
  7. FETCHING GET /articles! ! {! "links": {! "self": "http://example.com/articles"! },!

    "data": [{! "type": "articles",! "id": "1",! "title": "JSON API paints my bikeshed!"! }, {! "type": "articles",! "id": "2",! "title": "Rails is Omakase"! }]! }
  8. FETCHING GET /articles/1! ! {! "links": {! "self": "http://example.com/articles/1"! },!

    "data": {! "type": "articles",! "id": "1",! "title": "JSON API paints my bikeshed!"! }! }
  9. CREATING POST /photos! Content-Type: application/vnd.api+json! Accept: application/vnd.api+json! ! {! "data":

    {! "type": "photos",! "title": "Ember Hamster",! "src": "http://example.com/images/productivity.png"! }! }
  10. UPDATING RELATIONSHIPS DELETE /articles/1/links/comments! Content-Type: application/vnd.api+json! Accept: application/vnd.api+json! ! {!

    "data": [! { "type": "comments", "id": "12" },! { "type": "comments", "id": "13" }! ]! }
  11. EXTENSIONS • Bulk extension
 application/vnd.api+json; ext=bulk
 • JSON Patch extension


    application/vnd.api+json; ext=jsonpatch ! • Custom extensions
 application/vnd.api+json; ext=my-org/custom-ext
  12. IMPLEMENTATIONS • Client libs: • JavaScript • Swift • Ruby

    • Server libs: • JavaScript • PHP • Ruby • Python • Go • .NET
  13. IMPLEMENTATIONS • Client libs: • Ember-data • Orbit.js • Server

    libs: • ActiveModel::Serializers • JSONAPI::Resources • Endpoints