Empty sparse fieldset in JSON API

739 views Asked by At

I have a resource (e.g. posts) which has a to-many relationship to other resources (e.g. comments). I do not need any fields of the related resource but their self-links (to fetch them asynchronously on demand). The response should look something like this:

{
  "links": {
    "self": "http://example.com/posts/1?xxx",
  },
  "data": [{
    "type": "posts",
    "id": "1",
    "attributes": {
      "title": "JSON API paints my bikeshed!"
    },
    "relationships": {
      "comments": {
        "links": {
          "self": "http://example.com/posts/1/relationships/comments",
          "related": "http://example.com/posts/1/comments"
        },
        "data": [
          { "type": "comments", "id": "5" },
          { "type": "comments", "id": "12" }
        ]
      }
    },
    "links": {
      "self": "http://example.com/posts/1"
    }
  }],
  "included": [{
    "type": "comments",
    "id": "5",
    "links": {
      "self": "http://example.com/comments/5"
    }
  }, {
    "type": "comments",
    "id": "12",
    "links": {
      "self": "http://example.com/comments/12"
    }
  }]
}

My question is how should the URL for the request look like?

My idea would be to include the comments and then use an empty sparse fieldset to avoid getting any comment fields but just the self link (+id, type). Hence, it should look something like http://example.com/posts/1?include=comments&fields[comments]=[]. So I need something like an empty sparse fieldset.

The JSON API specification does not say much about sparse fieldsets (http://jsonapi.org/format/#fetching-sparse-fieldsets) and their relation to links.

1

There are 1 answers

0
Philipp Mitterer On BEST ANSWER

The JSON API was able to answer my question.

In short, the correct way to specify an empty sparse fieldset would be:

http://example.com/posts/1?include=comments&fields[comments]=

There's a discussion going on about whether to include the links to individual relationship items in the relationship object:

{
  "links": {
    "self": "http://example.com/posts/1",
  },
  "data": [{
    "type": "posts",
    "id": "1",
    "attributes": {
      "title": "JSON API paints my bikeshed!"
    },
    "relationships": {
      "comments": {
        "links": {
          "self": "http://example.com/posts/1/relationships/comments",
          "related": "http://example.com/posts/1/comments",
          "item": [ "http://example.com/comments/5", "http://example.com/comments/12" ]
        },
        "data": [{
           "type": "comments", 
           "id": "5", 
           "links": {
              "about": "http://example.com/comments/5"
            }
        }, {
           "type": "comments", 
           "id": "12", 
           "links": {
              "about": "http://example.com/comments/12"
            }
        }] 
      }
    },
    "links": {
      "self": "http://example.com/posts/1"
    }
  }]
}