MAKE API
GREAT AGAIN

 

Current State​

Problems

 
  • Inconsistency
  • No common way of metatags
  • API per view
1

Solution

JSON API

What is it?

 

Examples

 
{
  "data": [{
    "type": "articles",
    "id": "1",
    "attributes": {
      "title": "JSON API paints my bikeshed!",
      "body": "The shortest article. Ever.",
      "created": "2015-05-22T14:56:29.000Z",
      "updated": "2015-05-22T14:56:28.000Z"
    },
    "relationships": {
      "author": {
        "data": {"id": "42", "type": "people"}
      }
    }
  }],
  "included": [
    {
      "type": "people",
      "id": "42",
      "attributes": {
        "name": "John",
        "age": 80,
        "gender": "male"
      }
    }
  ]
}
{
  "meta": {
    "total-pages": 13
  },
  "data": [
    {
      "type": "articles",
      "id": "3",
      "attributes": {
        "title": "JSON API paints my bikeshed!",
        "body": "The shortest article. Ever.",
        "created": "2015-05-22T14:56:29.000Z",
        "updated": "2015-05-22T14:56:28.000Z"
      }
    }
  ],
  "links": {
    "self": "http://example.com/articles?page[number]=3&page[size]=1",
    "first": "http://example.com/articles?page[number]=1&page[size]=1",
    "prev": "http://example.com/articles?page[number]=2&page[size]=1",
    "next": "http://example.com/articles?page[number]=4&page[size]=1",
    "last": "http://example.com/articles?page[number]=13&page[size]=1"
  }
}

Solved Problem

 
  • Consistent objects
  • Metataging
  • Easy to serialize/deserialize
  • inclusion /relationships
  • Easy pagination
  • One "standarized" way of building api
 

Implemenataion

Backend

 

https://github.com/cerebris/jsonapi-resources​

 

Migration

 
  • Create resources e.g. Issue
  • Create serializers based on resources
 

Frontend

jsonapi-serializer

 

 

Migration

 
  • Add middleware between action -> store
 

deck

By Michał Koźmiński