#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. Однако это не меняет аргумент.