Какой самый RESTful способ обновить часть ресурса, когда генерация этого ресурса выполняется на стороне сервера, а не на стороне клиента.Это не идемпотентное действие, так как вспомогательные данные на сервере могут меняться между запросами.
Я создаю Rest API, и я пришел к выбору дизайна, где я совершенно уверен в способе двигаться вперед.
У меня есть ресурс, который я хочуобновление, которое включает в себя создание большого BLOB-объекта JSON на основе данных поддержки, а затем сохранение этого BLOB-объекта в базу данных перед его отправкой обратно пользователю.
Мой вопрос заключается в том, как наиболее RESTful способ выполнить это действие?Поскольку клиент не выполняет вычисления, и он также не является идемпотентным, так как набор данных может меняться при каждом вызове, я чувствую, что использовать PUT неестественно.
Я остановился на POST, ноэто тоже не правильно.
Третий вариант - иметь подресурс, который описывает действие обновления - это тоже не правильно.
Например, у меня есть документ:
GET /document/<documentId>
, который возвращает что-то вроде:
"body": {
"createdAt": "2019-01-01 12:00:00",
"updatedAt": "2019-01-01 13:00:00",
"name": "example",
"location": "example",
"city": "example"
}
Эти поля генерируются сервером при создании документа, клиент не обновляет их.
Чтобы разрешитьКлиент, чтобы сообщить, что он хотел бы, чтобы сервер обновил документ, я остановился на:
POST /document/<documentId>
"body": {
"param1": "updatedparam1",
"param2": "updatedparam2"
}
Альтернативный подход будет сделать что-то вроде:
POST /document/<documentId>/refresh
"body": {...}
, но это чувствуетбольше похоже на вызов RPC, а не на REST.
Имеет ли это логический смысл?Я не видел много предположений о том, что POST
может относиться к одному ресурсу, а не к коллекции.
Пожалуйста, дайте мне знать, если я могу расширить что-нибудь, я бился головой об этомна некоторое время и, возможно, что-то пропустил.