logo

Extra Block Types (EBT) - New Layout Builder experience❗

Extra Block Types (EBT) - styled, customizable block types: Slideshows, Tabs, Cards, Accordions and many others. Built-in settings for background, DOM Box, javascript plugins. Experience the future of layout building today.

Demo EBT modules Download EBT modules

❗Extra Paragraph Types (EPT) - New Paragraphs experience

Extra Paragraph Types (EPT) - analogical paragraph based set of modules.

Demo EPT modules Download EPT modules

Scroll
04/09/2025, by Ivan

TL;DR: Usa una query string come ?include=field_comments.uid per includere tutte le entità referenziate da field_comments e tutte le entità referenziate da uid su quelle entità!


JSON:API ti aiuta a eliminare richieste HTTP permettendoti di specificare i percorsi delle relazioni che desideri vengano incluse nel documento di risposta. Come?

Recuperare singole risorse

Recupera articolo

Immaginiamo di avere un articolo con due commenti e ciascuno di questi commenti ha lo stesso autore. Per ottenere tutti questi dati senza include, faresti prima una richiesta 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"
          }
        }
      }
    }
  }
}

Recupera commento

Poi, faresti una richiesta 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"
          }
        }
      }
    }
  }
}

Recupera utenti

E ancora, avresti bisogno di fare due ulteriori richieste a /comment/one-random-uuid/uid e /comment/two-random-uuid/uid . Possiamo vedere che la seconda richiesta è del tutto inutile perché sappiamo che l’autore di entrambi i commenti è lo stesso nel nostro esempio.

Quindi, come possono aiutare gli include?

Recupera tutto in una volta usando include

È facile! Basta aggiungere un parametro di query all’URL della richiesta originale con i nomi dei campi di relazione che desideri includere, e il server cercherà tutto per te e lo aggiungerà al documento di risposta originale.

Nel nostro esempio, l’URL della richiesta che faresti sarebbe GET /jsonapi/node/article/some-random-uuid?include=field_comments.uid. In altre parole, stai dicendo "per favore aggiungi gli oggetti risorsa per il campo field_comments sull’articolo, poi aggiungi anche gli oggetti risorsa per il campo uid sui commenti a cui si riferisce." Questi "percorsi di relazione" possono essere lunghi quanto vuoi, non ci sono limiti!

Il documento di risposta che riceveresti dal server sarebbe:

{
  "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"
    }
  }]
}

Non è fantastico? Abbiamo ottenuto tutti i dati in una sola richiesta! Nota come l’oggetto risorsa utente sia incluso solo una volta, anche se è referenziato due volte. Questo mantiene bassa la dimensione della risposta. Nota anche come ora ci sia una chiave data in ciascun oggetto relazione. Questo ti permette di correlare gli oggetti risorsa inclusi con gli oggetti risorsa che li hanno referenziati.

Quando usare include?

Parlando di dimensione della risposta... in questo esempio, ci siamo risparmiati tempo ottenendo tutte le risorse in una singola richiesta. Tuttavia, in alcune circostanze, includere oggetti risorsa correlati renderà la risposta piuttosto grande e/o rallenterà il tempo di caricamento iniziale. In quel caso, potrebbe essere meglio fare più richieste in parallelo.

Include per collezioni e relazioni

Infine, il parametro di query include è supportato anche su collezioni e risorse di relazione! Gli include sulle collezioni possono farti risparmiare molte altre richieste.

Esempio di include per collezione

Recuperare include per una collezione potrebbe assomigliare a questo GET /jsonapi/node/article?include=uid. Gli included sono simili ma separati dai data (array invece di oggetto) come mostrato di seguito.

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

Articolo da Documentazione di Drupal.