Как создать кастомный route, который будет слушать Subrequests

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

Аватар пользователя Max-Z Max-Z 21 февраля 2019 в 19:10

Вчера благодаря совету уважаемого Gun_Doze я узнал о полезном модуле Subrequests, который оптимизирует множественные запросы JSONAPI путём их объединения.
Для клиентской части существует аналогичный NPM модуль.
Также был обнаружен другой полезный модуль Decoupled Router, который создает "умный" REST endpoint.
Проблема в том, что документации как таковой нет, есть только пара заметок, покрывающих вопросы создания blueprint'ов, синтаксис запросов и т.д.
Я справился с JS-частью, но застрял в конфигурации Drupal. Есть ли какой-то внятный источник, который показал бы, как создать route с помощью этого Decoupled Router, и чтобы он слушал мои реквесты в формате Subrequests, которые поступают из React?
Заранее спасибо!

Лучший ответ

Аватар пользователя gun_dose gun_dose 22 февраля 2019 в 10:05
1

Никакого роута создавать не нужно. Он уже создан. Нужно кидать POST-запрос на /subrequests и всё

Комментарии

Аватар пользователя Max-Z Max-Z 22 февраля 2019 в 15:14

В документации к NPM-версии они прекрепляют блюпринт с помощью params при этом используют GET. А если я хочу POST, блюпринт таким же образом прикрепляется?

axios.get('http://127.0.0.1:3456/subrequests', {
    params: {
      query: JSON.stringify(blueprint),
    }
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

Вот эта фраза из док. к Друпал-модулю меня смущает.

You MAY send the blueprint document as the payload in a POST request. Alternatively, you MAY also send it in a GET request as a percent encoded string in a query string parameter with the name of query.

Получается, что для GET и POST разные форматы и методы отправки?

Аватар пользователя gun_dose gun_dose 22 февраля 2019 в 16:00

Ой, хз, я npm-пакетов на эту тему не ставил. Почитал доки по пхп и написал свою приблуду, которая собирает реквесты и шлёт их пост-запросом.

Аватар пользователя Max-Z Max-Z 22 февраля 2019 в 16:04

Всё работает вот так:

await axios({
                method: 'post',
                url: `${prodURL}/subrequests`,
                auth: {
                    username: `${fetchUsername}`,
                    password: `${fetchPassword}`
                },
                data: JSON.stringify(blueprint)
            })
Аватар пользователя Max-Z Max-Z 22 февраля 2019 в 16:06

А вот какой блюпринт получился:

{
                        requestId: this.randomId(1, 1000000000),
                        uri: `${prodURL}/jsonapi/node/puzzle/${uuid}/relationships/field_albums`,
                        action: 'create',
                        body: JSON.stringify({
                            "data": [
                                {
                                    "type": "node--album",
                                    "id": album_uuid
                                }
                            ]
                        }),
                        headers: {
                            'Accept': 'application/vnd.api+json',
                            'Content-Type': 'application/vnd.api+json',
                            'X-CSRF-Token': this.props.data.xcsrfToken,
                            'Authorization': auth
                        }

                    }