В моем API есть следующая структура
/root-resources/{root-resources-id}/sub-resource
/root-resources/{root-resources-id}/another-sub-resource
Я пытаюсь достичь идиоматического c и REST-совместимого способа изменить эти подресурсы в любое время.
Первоначально я думал о том, чтобы использовать только метод POST, что означает, что всякий раз, когда я хочу изменить sub-resource
, я просто нажимаю на конечную точку POST.
Причина, по которой я не хочу В этом случае используйте PUT, потому что я не изменяю подресурс, я фактически создаю новый.
Эта стратегия подразумевает, что:
I Придется выбрать подмножество данных этого подресурса, которое не может быть отредактировано конечной точкой PUT / PATCH (скажем, подмножество является полем ID - нам нужно защитить первичный ключ).
Используя POST, мне нужно будет удалить предыдущие сохраненные данные, когда я POST другой субресурс с существующим идентификатором.
Пример:
- Создание субресурса успешно
POST /root-resources/{root-resources-id}/sub-resource
body: {
"id": "123",
"name": "John"
}
Получить подресурс
GET /root-resources/{root-resources-id}/sub-resource
response: {
"id": "123",
"name": "John"
}
Редактировать отдельный атрибут, который можно редактировать
PATCH /root-resources/{root-resources-id}/sub-resource
body: {
"name": "Mary"
}
Получить обновленный ресурс
GET /root-resources/{root-resources-id}/sub-resource
response: {
"id": "123",
"name": "Mary"
}
Попробуйте отредактировать атрибут, который нельзя редактировать
PATCH /root-resources/{root-resources-id}/sub-resource
body: {
"id": "456"
}
response: not allowed
Создать другой подресурс, который заменит предыдущий
POST /root-resources/{root-resources-id}/sub-resource
body: {
"id": "456"
}
Получить самый последний созданный ресурс
GET /root-resources/{root-resources-id}/sub-resource
response: {
"id": "456",
"name": null
}
Что вы все думаете об этом подходе? Есть предложения?