logo

Paleta de lienzo: 隆Hazlo colorido!馃帹

Palette - Constructor visual de p谩ginas, no se requiere t铆tulo en dise帽o.

Demo en vivo Descargar Palette

Scroll
18/05/2025, by Ivan

TL;DR: Utiliza una cadena de consulta como ?include=field_comments.uid para incluir todas las entidades referenciadas por field_comments y todas las entidades referenciadas por uid en esas entidades.


JSON:API te ayuda a eliminar solicitudes HTTP permiti茅ndote especificar rutas de relaciones que deseas incluir en el documento de respuesta. 驴C贸mo?

Obteniendo recursos individuales

Obtener un art铆culo

Imagina que tienes un art铆culo con dos comentarios y cada uno de esos comentarios tiene el mismo autor. Para obtener todos estos datos sin includes, primero har铆as una solicitud a GET /jsonapi/node/article/some-random-uuid:

{
  "data": {
    "type": "node--article",
    "id": "some-random-uuid",
    "relationships": {
      "field_comments": {
        "links": {
          "related": {
            "href": "https://my.example.com/node/article/some-random-uuid/field_comments"
          }
        }
      }
    }
  }
}

Obtener comentarios

Luego, har铆as una solicitud a GET /node/article/some-random-uuid/field_comments:

{
  "data": [{
    "type": "comment",
    "id": "one-random-uuid",
    "relationships": {
      "uid": {
        "links": {
          "related": {
            "href": "https://my.example.com/comment/one-random-uuid/uid"
          }
        }
      }
    }
  }, {
    "type": "comment",
    "id": "two-random-uuid",
    "relationships": {
      "uid": {
        "links": {
          "related": {
            "href": "https://my.example.com/comment/two-random-uuid/uid"
          }
        }
      }
    }
  }
]
}

Obtener usuarios

Y de nuevo, necesitar铆as hacer dos solicitudes m谩s a /comment/one-random-uuid/uid y /comment/two-random-uuid/uid. Podemos ver que la segunda solicitud es completamente innecesaria porque sabemos que el autor de ambos comentarios es el mismo en nuestro ejemplo.

驴Entonces, c贸mo pueden ayudar los includes?

Obtener todo de una vez usando include

隆Es f谩cil! Simplemente agregando un par谩metro de consulta a la URL original con los nombres de los campos de relaci贸n que deseas incluir, el servidor sabr谩 que debe buscar todo por ti y agregarlo al documento de respuesta original.

En nuestro ejemplo, la URL de la solicitud ser铆a GET /jsonapi/node/article/some-random-uuid?include=field_comments.uid. En otras palabras, est谩s diciendo: "por favor, agrega los objetos recurso para el campo field_comments en el art铆culo, luego tambi茅n agrega los objetos recurso para el campo uid de los comentarios que hace referencia". Estos "caminos de relaci贸n" pueden ser tan largos como desees, 隆no hay l铆mite!

El documento de respuesta que recibir铆as del servidor ser铆a:

{
  "data": {
    "type": "node--article",
    "id": "some-random-uuid",
    "relationships": {
      "field_comments": {
        "data": [{
          "type": "comment",
          "id": "one-random-uuid"
        }, {
          "type": "comment",
          "id": "two-random-uuid"
        }],
        "links": {
          "related": {
            "href": "https://my.example.com/node/article/some-random-uuid/field_comments"
          }
        }
      }
    }
  },
  "included": [{
    "type": "comment",
    "id": "one-random-uuid",
    "relationships": {
      "uid": {
        "data": [{
          "type": "user",
          "id": "another-random-uuid"
        }],
        "links": {
          "related": {
            "href": "https://my.example.com/comment/one-random-uuid/uid"
          }
        }
      }
    }
  }, {
    "type": "comment",
    "id": "another-random-uuid",
    "relationships": {
      "uid": {
        "data": [{
          "type": "user",
          "id": "one-random-uuid"
        }],
        "links": {
          "related": {
            "href": "https://my.example.com/comment/two-random-uuid/uid"
          }
        }
      }
    }
  }, {
    "type": "user",
    "id": "another-random-uuid",
    "attributes": {
      "name": "c0wb0yC0d3r"
    }
  }]
}

驴No es genial? 隆Obtenemos todos los datos en una sola solicitud! Observa que el objeto recurso de usuario solo se incluye una vez, aunque se referencia dos veces. Esto mantiene bajo el tama帽o de la respuesta. Tambi茅n nota c贸mo ahora hay una clave data en cada objeto de relaci贸n. Eso te permite correlacionar los objetos recurso incluidos con los objetos recurso que los referencian.

驴Cu谩ndo usar include?

Hablando del tama帽o de la respuesta... en este ejemplo, nos ahorramos tiempo al obtener todos los recursos en una sola solicitud. Sin embargo, en ciertas circunstancias, incluir objetos recurso relacionados har谩 que el tama帽o de la respuesta sea bastante grande y/o el tiempo hasta el primer byte muy lento. En ese caso, podr铆a ser mejor hacer varias solicitudes en paralelo.

Include para colecciones y relaciones

Finalmente, el par谩metro de consulta include tambi茅n est谩 soportado en recursos de colecci贸n y relaci贸n. Los includes en colecciones pueden ahorrarte muchas solicitudes adicionales.

Ejemplo de include para colecci贸n

Obtener includes para una colecci贸n podr铆a verse as铆: GET /jsonapi/node/article?include=uid. Los objetos incluidos est谩n separados de data (array en lugar de objeto) como se muestra a continuaci贸n.

{
  "data": [{...}],
  "included": [{
    "type": "user",
    "id": "another-random-uuid",
    "attributes": {
      "name": "c0wb0yC0d3r"
    }
  }]
}

Art铆culo de la Documentaci贸n de Drupal.