Создание новых ресурсов (POST)
На этой странице приведены примеры POST-запросов для модуля JSON:API.
POST-запросы используются для создания новых ресурсов. Если вы хотите изменить ресурс — используйте PATCH-запрос.
Спецификация JSON:API (а значит и модуль JSON:API в Drupal) поддерживает создание только одного ресурса за один POST-запрос. Создание нескольких связанных сущностей в одном запросе невозможно. Для этого рекомендуется использовать модуль Subrequests.
Включение операций создания
Перейдите в /admin/config/services/jsonapi
и установите флажок «Accept all JSON:API create, read, update, and delete operations».

Аутентификация
Для POST-запросов обычно требуется аутентификация. Примеры ниже используют Basic Auth — имя пользователя и пароль существующего пользователя Drupal с правом создавать указанный тип контента.
Включите модуль basic_auth
, настройте разрешения роли и передайте закодированные данные в заголовке Authorization
.
Пример использует пользователя с логином «api» и паролем «api».
Обязательные заголовки
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
Authorization: Basic YXBpOmFwaQ==
Curl-пример
curl \
--user api:api \
--header 'Accept: application/vnd.api+json' \
--header 'Content-type: application/vnd.api+json' \
--request POST http://drupal.d8/jsonapi/node/article \
--data-binary @payload.json
Простой POST-запрос
URL: http://example.com/jsonapi/node/article
Тело запроса
{
"data": {
"type": "node--article",
"attributes": {
"title": "My custom title",
"body": {
"value": "Custom value",
"format": "plain_text"
}
}
}
}
Ответ
HTTP 201 (Created). Тело ответа содержит объект JsonAPI с созданной сущностью.
POST-запрос с отношениями
URL: http://example.com/jsonapi/node/article
Поля ссылок на сущности указываются в relationships
, а не в attributes
, иначе будет ошибка.
id
должен содержать UUID, а не числовой ID сущности.
Тело запроса
{
"data": {
"type": "node--article",
"attributes": {
"title": "Article by admin",
"body": {
"value": "Custom value",
"format": "plain_text"
}
},
"relationships": {
"uid": {
"data": {
"type": "user--user",
"id": "{{UUID пользователя}}"
}
},
"field_taxonomy_term_reference": {
"data": {
"type": "taxonomy_term--{{bundle}}",
"id": "{{UUID термина}}"
}
}
}
}
}
Ответ
HTTP 201 (Created). Возвращается объект JsonAPI с созданной сущностью.
POST через REST API
Создайте собственный модуль с ресурсом REST и включите его через /admin/config/services/rest.
Пример реализации ресурса (см. оригинал выше):
- Создаёт узлы (Node::create) с типом и содержимым из полученных данных
- Требует права «administer site content»
Пример JSON для создания узлов:
[
{
"nodetype": "article",
"title": "Training",
"body": "..."
},
{
"nodetype": "page",
"title": "Team Building",
"body": "..."
},
{
"nodetype": "article",
"title": "Services",
"body": "..."
},
{
"nodetype": "page",
"title": "Product Management",
"body": "..."
},
{
"nodetype": "article",
"title": "Business Development",
"body": "..."
}
]
Curl-запрос к REST API:
curl \
--user uname:password \
--header 'Accept: application/json' \
--header 'Content-type: application/json' \
--request POST http://example.com/rest/api/post/node-create \
--data-binary @post_data.json
Статья с сайта Drupal Documentation.