Create and include related objects (updated example)
You can include related object(s) details in responses with the query string parameter named “include”. You can use the “include” parameter on any kind of route (classical CRUD route or relationships route) and any kind of HTTP methods as long as the method returns data.
This feature will add an additional key in the result named “included”
Example
Create user
Request:
POST /users HTTP/1.1
Content-Type: application/vnd.api+json
{
"data": {
"type": "user",
"attributes": {
"first_name": "Bob",
"last_name": "Green",
"age": 37,
"status": "active",
"email": "bob@example.com"
}
}
}
Response:
HTTP/1.1 201 Created
Content-Type: application/json
{
"data": {
"attributes": {
"age": 37,
"email": "bob@example.com",
"first_name": "Bob",
"last_name": "Green",
"status": "active"
},
"id": "3",
"type": "user"
},
"jsonapi": {
"version": "1.0"
},
"meta": null
}
Create computer for user and fetch related user
Request:
POST /computers?include=user HTTP/1.1
Content-Type: application/vnd.api+json
{
"data": {
"type": "computer",
"attributes": {
"name": "Amstrad"
},
"relationships": {
"user": {
"data": {
"id": "3",
"type": "user"
}
}
}
}
}
Response:
HTTP/1.1 201 Created
Content-Type: application/json
{
"data": {
"attributes": {
"name": "Amstrad"
},
"id": "2",
"relationships": {
"user": {
"data": {
"id": "3",
"type": "user"
}
}
},
"type": "computer"
},
"included": [
{
"attributes": {
"age": 37,
"email": "bob@example.com",
"first_name": "Bob",
"last_name": "Green",
"status": "active"
},
"id": "3",
"type": "user"
}
],
"jsonapi": {
"version": "1.0"
},
"meta": null
}
Get user
Request:
GET /users/3 HTTP/1.1
Content-Type: application/vnd.api+json
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"data": {
"attributes": {
"age": 37,
"email": "bob@example.com",
"first_name": "Bob",
"last_name": "Green",
"status": "active"
},
"id": "3",
"type": "user"
},
"jsonapi": {
"version": "1.0"
},
"meta": null
}
Get user with related computers
Request:
GET /users/3?include=computers HTTP/1.1
Content-Type: application/vnd.api+json
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"data": {
"attributes": {
"age": 37,
"email": "bob@example.com",
"first_name": "Bob",
"last_name": "Green",
"status": "active"
},
"id": "3",
"relationships": {
"computers": {
"data": [
{
"id": "2",
"type": "computer"
}
]
}
},
"type": "user"
},
"included": [
{
"attributes": {
"name": "Amstrad"
},
"id": "2",
"type": "computer"
}
],
"jsonapi": {
"version": "1.0"
},
"meta": null
}
Get users
Request:
GET /users HTTP/1.1
Content-Type: application/vnd.api+json
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"data": [
{
"attributes": {
"age": 21,
"email": "john@example.com",
"first_name": "John",
"last_name": "Smith",
"status": "active"
},
"id": "1",
"type": "user"
},
{
"attributes": {
"age": 42,
"email": "sam@example.com",
"first_name": "Sam",
"last_name": "White",
"status": "active"
},
"id": "2",
"type": "user"
},
{
"attributes": {
"age": 37,
"email": "bob@example.com",
"first_name": "Bob",
"last_name": "Green",
"status": "active"
},
"id": "3",
"type": "user"
}
],
"jsonapi": {
"version": "1.0"
},
"meta": {
"count": 3,
"totalPages": 1
}
}
Get users with related computers
Request:
GET /users?include=computers HTTP/1.1
Content-Type: application/vnd.api+json
Response:
HTTP/1.1 200 OK
Content-Type: application/json
{
"data": [
{
"attributes": {
"age": 21,
"email": "john@example.com",
"first_name": "John",
"last_name": "Smith",
"status": "active"
},
"id": "1",
"relationships": {
"computers": {
"data": []
}
},
"type": "user"
},
{
"attributes": {
"age": 42,
"email": "sam@example.com",
"first_name": "Sam",
"last_name": "White",
"status": "active"
},
"id": "2",
"relationships": {
"computers": {
"data": [
{
"id": "1",
"type": "computer"
}
]
}
},
"type": "user"
},
{
"attributes": {
"age": 37,
"email": "bob@example.com",
"first_name": "Bob",
"last_name": "Green",
"status": "active"
},
"id": "3",
"relationships": {
"computers": {
"data": [
{
"id": "2",
"type": "computer"
}
]
}
},
"type": "user"
}
],
"included": [
{
"attributes": {
"name": "ZX Spectrum"
},
"id": "1",
"type": "computer"
},
{
"attributes": {
"name": "Amstrad"
},
"id": "2",
"type": "computer"
}
],
"jsonapi": {
"version": "1.0"
},
"meta": {
"count": 3,
"totalPages": 1
}
}