Drupal8. REST. Возможно ли через REST постить более одной статьи за один раз?

Главные вкладки

Аватар пользователя gdev gdev 11 ноября 2015 в 7:51

Доброе утро!
Подскажите, пожалуйста. кто знает такой вопрос про REST.

Пытаюсь сделать API к своему сайту. Использую Drupal 8 (кайф, кстати). API фигачу естественно через встроенный REST-модуль.
Опубликовать 1 статью проблем нет.
Такой запрос (hal+json формат body в POST-запросе) отлично работает:
{ "_links":{ "type":{"href":"http://drupal8/rest/type/node/article" } },
"title":[{"value":"Title"} ] }

Но мне надо в одном POST-запросе передать несколько статей сразу. И тут засада.
Код что-то типа такого отказывается генерить 2 статьи сразу:
{ "_links":{ "type":{ "href":"http://drupal8/rest/type/node/article" } },
"title":[{"value":"Title 1"} ],
"title":[{"value":"Title 2"} ] }
Result: Status Code: 400 Bad Request "Syntax error"

Такое вообще возможно через REST передавать на публикацию сразу несколько статей?
Кто-нибудь сталкивался, помогите, пожалуйста, разобраться.
Спасибо.

ps Вот, кстати, ссылка про использование REST

Комментарии

Аватар пользователя Niklan Niklan 11 ноября 2015 в 9:10

В чём проблема выполнить это в несколько запросов? Проблема сразу отсылки нескольких материалов на добавление через REST скорее из коробки не будет работать, банально потому что вы можете отправить тогда N кол-во материалов которое упрется в лимиты php time execution. Разумнее на материал по запросу. Зато если что-то даст сбой, вы будите знать где именно.

Аватар пользователя graker graker 11 ноября 2015 в 11:27

Вообще REST-ресурс такого по умолчанию не предполагает. Но вы можете создать новый кастомный эндпойнт, например rest/create-multiple-articles, постить на него массив из нескольких сущностей и в нем вручную эти сущности сохранять. Плюс нужно тогда открыть транзакцию, чтобы запрос выполнился целиком или не выполнился вовсе.

Но Niklan правильно пишет про ошибки: не исключено, что лучше отправить несколько запросов.

Аватар пользователя gdev gdev 12 ноября 2015 в 6:52

Спасибо за ответы! (блин, задал такой же вопрос ещё в 5 местах, топовых, drupalистых, англоязычных. Ответили только тут. СПАСИБО, комрады!)

Главный вопрос в скорости/производительности.
В моём случае каждый из 10k+ пользователей ежедневно должен постить 1000 своих записей. Получится 10 млн. POST запросов в день (!), вместо 10 тыс. Многовато будет.
Теперь думаю в сторону конвейерной вставки данных напрямую в base_table сущности, через copy base_table (column1, column2 ...) from stdin delimiter as '|' null as ''";

Ещё раз спасибо ("ты не один")!