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.

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