|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Всем, привет! Есть код (не мой), сейчас появилась задача запретить некое действие над объектом, который в коде получен по id. Например, Task с неким статусом isRunning == true. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Меня самого смущает такая конструкция метода, но если её оставлять, то есть не переписывать, чтобы возвращался какой-нибудь объект в виде json со статусом(success=true/false), с кодом(например 200), со значение(value) в виде объекта, ну и с чем-нибудь. То какой тогда здесь подставить код будет правильнее? (КАКОЙ_ТО_КОД_ОШИБКИ в коде выше) Список здесь https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpServletResponse.html Или вообще это всё дичь, мрак и прошлый век и так больше не делают и всё нафиг переписать? )))) Сам предполагаю, что ближе всего SC_NOT_ACCEPTABLE (406), но описание у него кажется, что не подходит сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 22:07 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
упс, я тут что-то в коде намутил)) return new ErrorMessage(e.getMessage()); когда e не определена, писал прямо тут в поле сообщения. Но это не сильно важно, простите) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 22:09 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Nixic, верните ResponseEntity с кодом 451, допустим, или 423. И вообще, всегда возвращайте ResponseEntity ) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.02.2019, 22:46 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Nixic, Если это какой нибудь rest api, то вполне можно отдать json с кодом 200 и уже в json есть стандарт описания ошибки. Кратко и длинно. Это если запрет входит в бизнес логику работы клиента. Т.е. обычное дело. Иначе по безопасности можно вернуть код ошибки не из HTTP.Error для исключения взлома и подбора, брутфорса. Ну и http.error тоже можно. ... Можно ведь сказать что запрет ни при чем и это вовсе не запрет а статус Занято)) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 07:39 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Petro123Nixic, Если это какой нибудь rest api, то вполне можно отдать json с кодом 200 и уже в json есть стандарт описания ошибки. Кратко и длинно. Это если запрет входит в бизнес логику работы клиента. Т.е. обычное дело. Иначе по безопасности можно вернуть код ошибки не из HTTP.Error для исключения взлома и подбора, брутфорса. Ну и http.error тоже можно. ... Можно ведь сказать что запрет ни при чем и это вовсе не запрет а статус Занято)) по-моему, я впервые понял Петро и да, лучше ограничить кол-во HttpStatus`ов, которые может вернуть сервис и не использовать экстравагантные. Самое простое, изучить чей нибудь публичный api. Для примера, можно взять api github`а. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 09:42 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Озверинпо-моему, я впервые понял))) Прогресс у кого, у тебя или у меня?))))) Наверно у IT индустрии) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 10:24 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
NixicСам предполагаю, что ближе всего SC_NOT_ACCEPTABLE (406), но описание у него кажется, что не подходит сюда. Нет, 406 явно неприемлемо для данного случая, оно строго про заголовки запроса (и вообще в основном только про Accept). Ваш случай скорее 409 Conflict. У вас действие "запрещено в данном состоянии объекта". Может быть еще 423/424, но я бы сам взял 409. Ну и объект с описанием/статусом/чем угодно в ответе тоже будет полезно вернуть. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2019, 22:15 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Спасибо всем, было интересно почитать варианты и мнения :) В итоге, не поленился и переписал контроллеры(хорошо, что их там не много) и сделал возврат объекта со статусом 200 и полем success = false. Обработал на клиенте, кинул в интерфейс соответствующее сообщение из этого же объекта в респонсе :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 19:30 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
NixicСпасибо всем, было интересно почитать варианты и мнения :) В итоге, не поленился и переписал контроллеры(хорошо, что их там не много) и сделал возврат объекта со статусом 200 и полем success = false. Обработал на клиенте, кинул в интерфейс соответствующее сообщение из этого же объекта в респонсе :) Уж не знаю, хорошо ли, т.к. возврат http 200 при ошибке - довольно холиварная тема см. ответ на so . ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 22:23 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
cossack5http 200 при ошибкестакан полуналитый или полупустой? Можно спорить вечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2019, 22:49 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Nixic возврат объекта со статусом 200 и полем success = false. Звучит как "Я жив, но умер." ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 09:26 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
SQL2008Nixic возврат объекта со статусом 200 и полем success = false. Звучит как "Я жив, но умер."))). Не. Оптимистично: "я сходил в магазин. Хлеба нету")))) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 09:38 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
SQL2008Nixic возврат объекта со статусом 200 и полем success = false. Звучит как "Я жив, но умер." Я жив, но умер. И вот на всякий случай мои данные: Код: javascript 1. 2. 3. 4.
На самом деле, если писать правильно, то надо было сразу на клиенте писать что-то, что обрабатывало бы ошибки, но так как здесь хрен пойми что и как, то хотя бы так, уже лучше чем было) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 11:27 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Nixic Код: javascript 1.
почему не: ID:134 и всё? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 11:58 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Petro123Nixic Код: javascript 1.
почему не: ID:134 и всё? Чтобы потом по ID не отправлять запрос еще раз на сервер если понадобятся данные :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 16:59 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
К слову, респонс в value может возвращать значение в json формате сформированного из java объекта любого типа. SuccessResponseImpl Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 17:03 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Petro123Nixic, Если это какой нибудь rest api, то вполне можно отдать json с кодом 200 и уже в json есть стандарт описания ошибки. Кратко и длинно. Это если запрет входит в бизнес логику работы клиента. Т.е. обычное дело. Иначе по безопасности можно вернуть код ошибки не из HTTP.Error для исключения взлома и подбора, брутфорса. Ну и http.error тоже можно. ... Можно ведь сказать что запрет ни при чем и это вовсе не запрет а статус Занято)) да отлично ты запросил ентити а тебе прилетает 200 и нот фаунд в бади. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 17:55 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
andreykaT, Ты в моем ответе способен прочитать 4 варианта проектов? А против того что ты восстал (Одного из 4-х) использует яндекс и гугл api. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 18:42 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Боженька миловал от юза яндекса и гугла. зато наюзался амазона. может у яндекса и гугла пишут профи но амазон пишут проклятые кривые индусы. гугл думаю тоже. яндекс наверное нет. у них такие зарплаты что индусы туда работать не пойдут. так что так себе пример ) зы. я не восстал но в холиваре на тему 200 саксесс фалс я, пожалуй, займу сторону против хотя браузерщики например, рыдают если им присылаешь 404 и что-то в бади. они говорят что распарсить или обработать "правильно" не могут потому что 404 у них "по особому" обрабатывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 19:37 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
NixicИли вообще это всё дичь, мрак и прошлый век и так больше не делают и всё нафиг переписать? )))) Сам предполагаю, что ближе всего SC_NOT_ACCEPTABLE (406), но описание у него кажется, что не подходит сюда.406 - это когда клиент в заголовке Accept что-то написал, а сервер ему так ответить не может, больше 409 подходит, однако как выше написали лучше 200 с правильным пейлоадом: коды ошибок в HTTP - это прошлый век и они реально никакие кейсы не покрывают ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2019, 20:14 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
... но статусные коды HTTP-протокола позволяют работать (произвольному) балансировщику нагрузки, а выпендрёж с "ошибка в теле успешного отклика" - нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 06:08 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, а по каким статусам балансировщик что-то балансировать собирается? Я здесь сходу могу назвать разве что 503, толку от которого не особо-то и много: чтобы взять и перебросить клиента с одной ноды на другую, он либо stateless должен быть, либо состояние между нодами должно синхронизироваться, а больше никаких полезных кодов нет (ну разве что 404 может означать что ничего не задеплоено и нужно валить отсюда, а значит в приложении 404 уже нельзя использовать). С другой стороны, если думать о том, что если сервер сервер что-то не смог обработать, то нужно возвращать 4xx, то возникают некие проблемы с определением того, какой именно статус нужно возвратить, ну вот примеры: - клиент прислал невалидные данные (условно не соответствуют схеме) - это какой код? - мы запрос можем обработать, но от клиента требуется подтверждение (заголовок или еще что) - а это какой код? Заход с другой стороны: мы делаем нагрузочное тестирование и все наши "выдуманные" 4xx в отчетах будут фигурировать как ошибки, тоже так себе тема. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 07:44 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Андрей ПанфиловBasil A. Sidorov, С другой стороны, если думать о том, что если сервер сервер что-то не смог обработать, то нужно возвращать 4xx, то возникают некие проблемы с определением того, какой именно статус нужно возвратить, ну вот примеры: - клиент прислал невалидные данные (условно не соответствуют схеме) - это какой код? . сто раз обсуждали и еще 1 раз обсудить или вы в самом деле не знаете, что принято возвращать? (на всякий пожарный, поясню, надо возвращать то, что у вас описано в api). Если же брать общую практику, то : - валидный json, но что-то не так со схемой - 422 анпроцессибл энтити - просто ожидаем json, а пришел какой-то xml - 400 бэд реквест - дальше уже вариации на тему Андрей Панфилов- мы запрос можем обработать, но от клиента требуется подтверждение (заголовок или еще что) - а это какой код? - 403 как бе для таких случаев ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 08:59 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Андрей ПанфиловЗаход с другой стороны: мы делаем нагрузочное тестирование и все наши "выдуманные" 4xx в отчетах будут фигурировать как ошибки, тоже так себе тема. Это какой-то надуманный кейс - если у вас проходит нагрузачное тестирование то и логи у вас не продакшн будут. Или в чем проблема? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 09:00 |
|
Какой код ответа вернуть в HttpServletResponse, если действие над объектом запрещено?
|
|||
---|---|---|---|
#18+
Андрей ПанфиловNixicИли вообще это всё дичь, мрак и прошлый век и так больше не делают и всё нафиг переписать? )))) Сам предполагаю, что ближе всего SC_NOT_ACCEPTABLE (406), но описание у него кажется, что не подходит сюда.406 - это когда клиент в заголовке Accept что-то написал, а сервер ему так ответить не может, больше 409 подходит, однако как выше написали лучше 200 с правильным пейлоадом: коды ошибок в HTTP - это прошлый век и они реально никакие кейсы не покрывают если отказываться от "одного" рест подхода, то и методы типа post, put, delete - тоже нет смысла использовать. Переходите на json rpc - не парьтесь: все запросы post с нагрузкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2019, 10:01 |
|
|
start [/forum/topic.php?fid=59&msg=39773696&tid=2121477]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
176ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 294ms |
0 / 0 |