POST

Curso: JSON:API

Hacer los POST puede ser lo más complicado que hay en JSON:API pero mas que nada por la estructura json que puede costarnos un poco hacerla.

Tenemos que tener en cuenta lo siguiente:

Respeta los permisos, a si que el usuario que usemos debe tener los permisos necesarios para poder crear la entidad.

Respeta los formatos de los campos y el tipo de dato, de modo que en un campo de tipo int no podemos meter un string.

Antes de realmente empezar tenemos que hacer 2 cosas:

La primera es instalar el módulo HTTP Basic Authentication para poder autenticarnos en Drupal, de manera muy básica y diría que no recomendable para producción.

La segunda es configurar JSON:API para que se puedan realizar operaciones de CRUD, esto se hace desde aquí /admin/config/services/jsonapi.

El post tendremos que hacerlo a /jsonapi/node/recipe en este ejemplo para crear un nodo de tipo “récipe”. Pero al igual que en los get tenemos que poner la entidad y el bundle que queremos crear para crear el endpoint.

Ahora que ya tenemos todo listo tenemos que utilizar las siguientes cabeceras:

Content-type: application/vnd.api+json
Accept: application/vnd.api+json

Y añadir al body el siguiente json, que podemos copiarlo de una de las respuestas ya que es la misma estructura json, excepto en data que pasa de ser un array a un objeto.

{
   "data":{
      "type":"node--recipe",
      "attributes":{
	     "title":"My primera receta",
         "field_recipe_instruction":{
            "value":"Mi primera receta contiene muchos ingredientes y no tengo claro como hacerla xD"
         },
         "moderation_state":"published",
		 "field_difficulty": "medium",
		 "field_preparation_time": 25,
		 "field_number_of_servings": 8,
		 "field_summary": {
            "value": "Un quiche de inspiración italiana con tomates secos y calabacín. Una comida ligera perfecta para un día de verano.",
            "format": "basic_html"
         }
      },
      "relationships":{
         "field_media_image":{
            "data":{
               "type":"media--image",
               "id":"d930e8cd-a0e6-4dd1-b32b-e92a14ee48ee"
            }
         }
      }
   }
}

Si nos da algún problema por el token X-CSRF-Token tenemos que obtenerlo haciendo un get sin autenticarnos a este endpoint:

/session/token

Esto nos devolverá un token el cual tendremos que usar en el header del X-CSRF-Token.