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.