JSON API V1 Создание вложенных ресурсов

Я реализую API, совместимый с JSON API V1, с использованием Grape API, который использует AR в качестве ORM. Я немного запутался в формате создания вложенных ресурсов/отношений. Похоже, нам нужно создавать по одному ресурсу за раз и можно ссылаться на существующие ресурсы. Но мы не можем, скажем, создавать записи для отношения has many в том же запросе.

Моя ситуация: есть модальный Donation. В нем много Split. Раскол принадлежит Fund. Мне нужно создать пожертвование с несколькими сплитами.

Вопрос. Как структурировать API в соответствии с рекомендациями JSON:API?

Просматривая документацию несколько раз, я думаю, что не могу сделать пожертвование за один вызов API, и мне придется создавать каждый ресурс отдельно, и может быть выполнена окончательная фиксация, чтобы инициировать пожертвование.

Шаг 1. Создайте пожертвование – предполагается, что возвращается идентификатор 100.

ПОСТ /api/v1/donations

{ type: "donation", data: { comments: "abc" } }

Шаг 2: Создайте Split 1

ПОСТ /api/v1/splits

{
  type: "split",
  data: { amount: 100_00 },
  relationships: {
    data: [{ type: "fund", id: 5 }, { type: "donation", id: 100 }]
  }
}

Наконец: инициируйте пожертвование чем-то вроде

ПАТЧ /api/v1/donations/100

{
  type: "donation"
  data: { 
    state: "process"
  }
}

Есть ли способ создать его в одном запросе?


person Ziyan Junaideen    schedule 20.07.2020    source источник


Ответы (1)


Спецификация JSON:API не поддерживает создание, обновление или удаление нескольких ресурсов в одном запросе в версии 1.0, которая является текущей стабильной версией.

Планируется, что в предстоящей версии 1.1 будет поддерживаться расширения, которые позволяют расширять базовую спецификацию. Существует предложение расширения Atomic Operations, предоставленное одним из хранители спецификации. Его планируется выпустить с версией 1.1 в качестве официального расширения.

person jelhan    schedule 21.07.2020
comment
Интересно... но на данный момент нам придется продолжить отдельные вызовы API.... большое спасибо... этот документ требует много чтения... - person Ziyan Junaideen; 23.07.2020