JSON:API amb Drupal 8 i Drupal 9

Client
  • Omitsis
Technologies
Date
  • 30/07/2019

A partir de Drupal 8.7, JSON:API ve inclòs al nucli de Drupal. Fins aleshores era un mòdul contribuït, desenvolupat gairebé íntegrament per Mateu Aguiló, però Dries (el creador de Drupal i dictador benèvol), veient-ne el potencial i comparant-la amb altres alternatives, va decidir integrar-la al core i destinar-hi més recursos.

Què és JSON:API?

JSON:API és un format que funciona sobre HTTP. Defineix com el client (normalment el navegador) ha de demanar o editar les dades del servidor, i com el servidor ha de respondre a aquestes sol·licituds.

L’objectiu principal és optimitzar les sol·licituds HTTP, tant en quantitat com en mida.

JSON:API es crea com una alternativa a REST API, que presentava una sèrie de problemes:

  • Cal definir un endpoint per a cada recurs.
  • No és possible modificar des del client els camps que es retornen. Això implica que, si es necessiten més camps, s’ha de demanar al desenvolupador de la REST API que els afegeixi, i si no s’utilitzen tots els camps, es malgasta amplada de banda i temps transferint dades innecessàries.
  • Si una pàgina necessita informació de més d’un recurs, cal fer múltiples crides o bé crear endpoints personalitzats.

Davant d’això van sorgir principalment dues alternatives: GraphQL i JSON:API. Totes dues superen les dificultats esmentades anteriorment; pots veure’n els detalls en el post de Dries.

Al meu parer, després d’haver provat totes dues tecnologies, la diferència és que JSON:API és més senzilla —i això sempre és positiu. I per ser una novetat, la documentació disponible a Drupal.org no està gens malament, tot i que, com sempre, li falten alguns exemples pràctics.

Com és el format de JSON:API?

Aquest seria un exemple d’un recurs de tipus article:

1// ...2{3"type": "articles",4"id": "1",5"attributes": {6"title": "Rails is Omakase"7},8"relationships": {9"author": {10"links": {11"self": "/articles/1/relationships/author",12"related": "/articles/1/author"13},14"data": { "type": "people", "id": "9" }15}16}17}18// ...

Com activar JSON:API a Drupal

Recorda que, perquè vingui al nucli, és necessari tenir Drupal 8 a partir de la versió 8.7. Si el vols tenir però no pots actualitzar, el pots instal·lar com a mòdul contribuït. Només cal activar-lo i no cal fer cap configuració addicional.

Després, accedeix a la URL /jsonapi del teu domini. En el nostre cas farem servir com a exemple drupaldemo.omitsis.com, on tenim un Drupal actualitzat a l’última versió amb el perfil d’instal·lació Umami.

Així doncs, si vas a drupaldemo.omitsis.com/jsonapi, veuràs tots els recursos disponibles —i el millor és que són navegables fent-hi clic. Algú familiaritzat amb GraphQL pot trobar a faltar GraphiQL, que és més potent, però el sistema de JSON:API és més senzill i directe.

Per exemple, si tenim un tipus de contingut anomenat “recepta”, fem clic a “recepta” i ens portarà a https://drupaldemo.omitsis.com/jsonapi/node/recipe, que és l’endpoint d’aquest tipus de contingut.

Es poden filtrar, treure camps, afegir-ne o establir relacions amb JSON:API?

Resposta ràpida: Sí, es pot.

Resposta llarga: Donaria per a un altre article complet —la segona part d’aquesta introducció. Mentrestant, pots consultar tota aquesta informació a la documentació oficial.

I si vols implementar JSON:API al teu proper projecte d’empresa, posa’t en contacte amb nosaltres, estarem encantats d’ajudar-te.

CA

Carlos Rincón

developer

Recent Posts