Обновление нескольких ресурсов одновременно невозможно с JSON API spec v1.0.Но есть несколько предложений, как это сделать.Оба официальные расширения , которые больше не поддерживаются , предназначены для поддержки создания, обновления или удаления нескольких запросов одновременно.Также существует открытый запрос на извлечение, который вводит операции в предстоящую спецификацию JSON API v1.2 .
Например, запрос на обновление двух ресурсов одновременно с использованием предложенных операций [1] будет выглядеть так:this:
PATCH /bulk HTTP/1.1
Host: example.org
Content-Type: application/vnd.api+json
{
"operations": [{
"op": "update",
"ref": {
"type": "articles",
"id": "1"
},
"data": {
"type": "articles",
"id": "1",
"attributes": {
"title": "Updated title of articles 1"
}
}
}, {
"op": "update",
"ref": {
"type": "people",
"id": "2"
},
"data": {
"type": "people",
"id": "2",
"attributes": {
"name": "updated name of author 2"
}
}
}]
}
Это обновит атрибут title
article
с идентификатором 1
и атрибут name
ресурса person
с идентификатором 2
в одной транзакции.
Запрос на обновление отношения «один к одному» и обновление соответствующего ресурса в отдельной транзакции будет выглядеть следующим образом:
PATCH /bulk HTTP/1.1
Host: example.org
Content-Type: application/vnd.api+json
{
"operations": [{
"op": "update",
"ref": {
"type": "articles",
"id": "1",
"relationship": "author"
},
"data": {
"type": "people",
"id": "2"
}
}, {
"op": "update",
"ref": {
"type": "people",
"id": "2"
},
"data": {
"type": "people",
"id": "2",
"attributes": {
"name": "updated name of author 2"
}
}
}]
}
Это запрос, который создает новый person
и связывает его какauthor
к существующему article
с идентификатором 1
:
PATCH /bulk HTTP/1.1
Host: example.org
Content-Type: application/vnd.api+json
{
"operations": [{
"op": "add",
"ref": {
"type": "people"
},
"data": {
"type": "people",
"lid": "a",
"attributes": {
"name": "name of new person"
}
}
}, {
"op": "update",
"ref": {
"type": "articles",
"id": "1",
"relationship": "author"
},
"data": {
"type": "people",
"lid": "a"
}
}]
}
Обратите внимание, что порядок важен.Операции должны выполняться по порядку сервером.Таким образом, ресурс должен быть создан, прежде чем он может быть связан с существующим.Чтобы выразить связь, мы используем локальный идентификатор (lid
).
Обратите внимание, что операции должны использоваться только в том случае, если запрос должен быть выполнен транзакционным.Если каждая из включенных операций может быть выполнена атомарно, следует использовать единичные запросы.
В соответствии с списком реализации, представленным на jsonapi.org , есть несколько библиотек, поддерживающих расширение Patch.
Обновление: Операции не были включены в версию-кандидат для JSON API v1.1.Это запланировано на v1.2 сейчас.Автор запроса на извлечение, который также является одним из сопровождающих спецификации, сказал , что «операции сейчас имеют наивысший приоритет».Кандидат на выпуск v1.2, включая Operations, может быть отправлен «RC в течение нескольких месяцев после финальной версии 1.1».
[1] Введение операций в JSON API v1.2 в настоящее время только предлагается, но не объединяется.,Там могут быть серьезные изменения.Прочитайте связанный запрос на получение перед реализацией.