Как смоделировать конечную точку HTTP с одним ресурсом - PullRequest
0 голосов
/ 06 января 2020

В моем API есть следующая структура

/root-resources/{root-resources-id}/sub-resource
/root-resources/{root-resources-id}/another-sub-resource

Я пытаюсь достичь идиоматического c и REST-совместимого способа изменить эти подресурсы в любое время.

Первоначально я думал о том, чтобы использовать только метод POST, что означает, что всякий раз, когда я хочу изменить sub-resource, я просто нажимаю на конечную точку POST.

Причина, по которой я не хочу В этом случае используйте PUT, потому что я не изменяю подресурс, я фактически создаю новый.

Эта стратегия подразумевает, что:

  1. I Придется выбрать подмножество данных этого подресурса, которое не может быть отредактировано конечной точкой PUT / PATCH (скажем, подмножество является полем ID - нам нужно защитить первичный ключ).

  2. Используя POST, мне нужно будет удалить предыдущие сохраненные данные, когда я POST другой субресурс с существующим идентификатором.

Пример:

  1. Создание субресурса успешно
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
}

Что вы все думаете об этом подходе? Есть предложения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...