Итак, какой из них следует использовать для создания ресурса? Или нужно поддерживать оба?
Вы должны использовать PATCH
. Вы ПАТЧИТЕ список вопросов, как
PATCH /questions HTTP/1.1
со списком, содержащим ваш создаваемый объект, такой как
[
{
"title": "I said semantics!",
"content": "Is this serious?",
"answer": "Not really"
}
]
Это запрос PATCH как
- вы изменяете существующий список ресурсов без предоставления всего нового контента
- вы изменяете состояние вашего нового вопроса с несуществующего на существующее без предоставления всех данных (сервер, скорее всего, добавит
id
).
Большим преимуществом этого метода является то, что вы можете создавать несколько объектов, используя один запрос, просто предоставив их все в списке.
Это то, что PUT
явно не может. Вы можете использовать POST
для создания нескольких объектов, так как это кухонная раковина HTTP и может делать практически все.
Недостатком является то, что, вероятно, никто не использует PATCH
таким образом. Боюсь, я только что это изобрел, но надеюсь, что предоставил хорошую аргументацию.
Вместо этого вы можете использовать CREATE
, поскольку разрешены пользовательские HTTP-глаголы, просто они могут не работать с некоторыми инструментами.
Что касается семантики, CREATE
ИМХО - единственный правильный выбор, все остальное - это квадратный колышек в круглой дыре. К сожалению, все, что у нас есть, это круглые отверстия.