Должен ли я использовать PUT или POST для добавления нового подпункта к существующему элементу?

#javascript #ajax #database #mongodb #http

#javascript #ajax #База данных #mongodb #http

Вопрос:

Предположим, у меня есть элемент (модель), который содержит поля, являющиеся массивами, например:

 const item = {
  name: "",
  prices: [{somePriceSpecificObject}],
}
 

Когда я хочу добавить новую цену в этот prices массив элементов, какой метод лучше использовать (с точки зрения качества, я думаю), PUT или POST?

Прямо сейчас я использую PUT because, создавая новую цену для prices массива, которую я редактирую item , но сейчас я создаю функциональность, которая позволит мне редактировать существующие записи, и это PUT , естественно, тоже работает, что заставило меня задуматься об этой проблеме.

Потому что это также имеет смысл использовать POST , потому что цена относительно элемента — это новая вещь, но элемент относительно меня с новой ценой по-прежнему остается элементом, только с отредактированным полем (цены).

Теперь одним из решений моей дилеммы может быть создание отдельной модели для prices ? Но я никогда этого не делал, потому что данный элемент в моих конкретных условиях никогда не будет иметь более нескольких цен, и это заставит меня делать больше запросов к базе данных (я не беспокоюсь о производительности, но, тем не менее, просто ищу лучшие практики).

Итак, какой маршрут, по-вашему, мне следует выбрать?

РЕДАКТИРОВАТЬ: на данный момент мои конечные точки api выглядят следующим образом:

 post("/one", POST.oneItem);
put("/addprice", PUT.addPriceToItem);

put("/editone/:id", PUT.EDIT.item);
put("/editone/:id/price/:priceId", PUT.EDIT.price);
 

Обратите внимание, что мне пришлось создать вложенный объект РЕДАКТИРОВАНИЯ в моем объекте PUT (который предоставляет функции обработки), чтобы иметь возможность легко различать добавление цены и редактирование цены, так что это заставило меня задуматься обо всем этом.

Ответ №1:

Я видел, что в большинстве случаев производственного кода никогда не выполняется запрос на удаление, поскольку в схеме есть программная клавиша удаления, которая включается при желании удалить определенную строку / документ. Следовательно, он всегда использует PUT в качестве наилучшей практики даже для удаления. Любые изменения в существующем документе должны быть PUT, потому что это поможет вам повысить производительность, если документ полностью не отличается от предыдущего. Это даже становится проще при кэшировании, поскольку нужно обновлять кеш, а не добавлять еще один и удалять какой-либо другой (на случай, если кеш заполнится в этот момент). В конце концов, если вы намерены сохранить цены в виде массива, я думаю, что PUT — лучший выбор.

Ответ №2:

«PUT /uri» создает / обновляет объект в «/uri». Ваш пример, в котором URI содержит «/addprice», ИМХО, является неправильным использованием PUT.

Если у вас есть коллекция X и вы хотите добавить элемент Y, используйте «PUT /X / Y». Если вы хотите, чтобы сервер назвал элемент, используйте «POST / x».

Комментарии:

1. Хорошо, это моя ошибка, это не все URI, я просто разбил маршрутизатор на части, которыми я могу легко управлять, и не добавил весь URI, это больше похоже http://localhost:3000/api/v1/stockitem/addprice

2. Однако это не меняет аргумент.