Код состояния HTTP, когда родительский ресурс больше не работает - PullRequest
0 голосов
/ 21 сентября 2018

В нашей Организации предметы в нашем инвентаре называются stocks.Каждый stock имеет sortScore, связанный с ним.Внутренний API предоставляется другой команде в организации для обновления sortScore stock.

PUT / api / stock / {stockid} / sortscore

Этот запрос обновляет sortScore акции.Может случиться так, что запас больше не будет live(it is sold), но по какой-то причине внутренний API для обновления sortScore все еще поражен другой командой.

По моему мнению, здесь ресурс sortScore, а родительским ресурсом является stock, который больше не существует (раньше он был активным).Даже если запас больше не равен live, мы по-прежнему храним его где-то в нашей базе данных.

Некоторые из нас спорят о коде статуса HTTP, который мы отправляем, когда stock is not live anymore.Поскольку ресурс недоступен по назначению Resource Identifier(URL), мы отправляем NOT FOUND .Но некоторые из наших коллег говорят, что поскольку акция когда-то существовала, то Status Code должен быть 2xx серии с сообщением This stock is not live anymore.

Теперь я здесь, чтобы узнать, что люди из stackoverflow думают о том, каким должен быть правильный ответ?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Общий код состояния для этого 409 Conflict.Идея 409 Conflict состоит в том, что даже если с вашим запросом все в порядке, текущее состояние сервера не позволяет ему быть успешным.

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

0 голосов
/ 21 сентября 2018

Итак, важно понять, что такое REST: понятия «родительский ресурс» и «дочерний ресурс» на самом деле не существуют .

Что касается REST и HTTP, обеспокоен;/a/b/c не обязательно имеет отношение к /a/b или /a/b/c/d.Каждый ресурс - это своя вещь, со своим собственным представлением (ями).

Так что вы должны думать о

PUT /api/stock/{stockid}/sortscore

В изоляции.

Поскольку вы неразрешать клиентам изменять ресурс, используя код состояния 2xx, не является правильной идеей.Код состояния 2xx не только указывает на то, что запрос был успешным, но также побуждает потребителей очищать свои кэши и т. Д.

404 Not Found - не совсем правильная идея, поскольку PUT должен создать ресурс , если его еще нет.

Метод PUT запрашивает, чтобы состояние целевого ресурса было создано или заменено на состояние, определенное представлением.заключенное в сообщение запроса полезная нагрузка

Мне кажется, что "он больше не жив" означает, что потребители больше не могут изменять состояние ресурса.Это, в свою очередь, говорит о том, что вы хотите получить код состояния 405 Метод не разрешен

Код состояния 405 (Метод не разрешен) указывает, что метод, полученный в строке запроса,известен исходному серверу, но не поддерживается целевым ресурсом.

...