Flask: сбит с толку из-за использования PUT / POST в Rest API - PullRequest
0 голосов
/ 27 апреля 2019

Уважаемые Старейшины / Программисты / Знающие люди,
Я прочитал очень популярный ответ об использовании PUT или POST, но я не смог понять, как правильно это сделать. Почти в каждом ответе есть комментарии о том, что это неправильно / это правильно. Могучий запутался здесь.
Мои требования:
Отправка 2 файлов Json на сервер, один для вставки в базу данных, а другой для обновления. Я думал, что буду использовать PUT для обновления и POST для вставки в базу данных. Таким образом, на стороне клиента я бы решал, вставлять или обновлять.

Путаница: поскольку только клиент отвечает за создание / обновление своих данных на сервере, даже POST в моем случае при повторении будет вставлять одну и ту же вещь (insert into table values) снова и снова, ведя себя как идемпотентное ИЛИ выдаст ошибку (из-за конфликта первичного ключа). Наконец, он не будет создавать что-то новое после двойного увольнения.

Вопрос: правильно ли использовать PUT для обновления и POST для вставки?

1 Ответ

0 голосов
/ 27 апреля 2019

PUT также можно использовать для создания.Что важно, так это URL.Это обычно принятый шаблон:

PUT /collection/1234 <- Update a specific item OR create it
POST /collection <- Add a new item to a collection

Какой из них вам подходит, зависит от нескольких вещей.Определяет ли сервер URL-адрес нового элемента или клиент?

Если клиент может выяснить, каким становится URL-адрес нового элемента, лучше использовать PUT, потому что вы можете легче повернутьэто в идемпотентный запрос.

Помните, что при запросе PUT цель всегда состоит в том, чтобы вы заменили ресурс на целевом URL новым состоянием.

Однако, если сервер создает шаблон URL (возможно, у вас есть автоматически увеличивающийся идентификатор), лучше использовать POST.POST не имеет в родительской коллекции, но это обычно.

Если вы хотите POST и хотите идемпотентности, вам нужен другой способ выяснить, что-то было повторным запросом.Вы получаете это бесплатно с PUT.Например, Stripe API решает , добавляя нестандартный заголовок Idempotency-Key.

...