
Tigran
10.03.2017
15:22:59
в данном случае - его не существует

Alexander
10.03.2017
15:23:00
когда нет метода
ты спрашиваешь у неспециалиста)
я не программирую API

Google

Tigran
10.03.2017
15:23:38
я не спрашиваю)

Alexander
10.03.2017
15:23:48
я контролирую выполнение задачи как менеджер

Tigran
10.03.2017
15:23:54
я пытаюсь обьяснить, что возвращать 404 не всегда уместно
http коды уместны для транспортного уровня

Alexander
10.03.2017
15:24:27
код ответа должен соответствовать тому, что там случилось, то есть кодов ответа у нас много, а не 3 штуки, мы смотрим таблицу и подбираем наиболее близкий

Tigran
10.03.2017
15:24:31
в случае, если такой метод не найден - имеет смысл отдавать 404ую, так как его нету

Alexander
10.03.2017
15:24:32
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

Tigran
10.03.2017
15:25:04
а вот в случае GET /api/v1/cars/{id}, когда не существует машины - не уместно отдавать 404ую
потому что такой метод существует

Alexander
10.03.2017
15:25:28
жёсткого стандарта тут нет, нельзя сказать "ты неправильно сделал, потому что вернул ХХХ код, а не УУУ", но разумно стараться подбирать наиболее близкие коды ответа, если они достаточно распространены
когда создаётся документ - код ответа должен быть 201, а не 200, потому что а.) он больше подходит б.) он распространён

Tigran
10.03.2017
15:26:01
так же неуместно возвращать 400 bad request, потому что синтакс запроса правильный
уместно возвращать 200 OK (роут и синтакс правильный)

Google

Tigran
10.03.2017
15:26:23
и в теле
{
"status": "error",
"code": xxx,
"message": "car not found"
}

Alexander
10.03.2017
15:27:03

Tigran
10.03.2017
15:27:19
/api/v1/cars/{id} есть
но нет машины по такому айди
имеет смысл отдавать 200 OK
и ошибку в теле
/api/v1/car/{id} нету
поэтому имеет смысл отдавать 404, потому что нет метода
понимаешь разницу?)
http - транспортный уровень, он не должен отвечать за логику твоего приложения
за это должны отвечать твои внутренние коды ошибок
а так да.. единого стандарта в REST нет, поэтому и много говно APIшек))

Alexander
10.03.2017
15:29:38
в данном случае запрос /api/v1/car123 должен вернуть или 400 или 405

Tigran
10.03.2017
15:29:57
почему 400 то?)

Alexander
10.03.2017
15:30:00
/api/v1/car/123 в данном случае (если 123 нет ) то 404

Tigran
10.03.2017
15:30:03
до синтакса не доходит
/api/v1/car123 - 404
Not found - не найдено
/api/v1/car/123 - 200

Google

Tigran
10.03.2017
15:30:44
и в теле написать, что нету такой машины
лан, хватит флудить, посмотри слэк)

Alexander
10.03.2017
15:31:19
400 это некая общая ошибка, плохой запрос), все другие 4xx её уточняют

Tigran
10.03.2017
15:32:11
так запрос не плохой)
такого запроса просто не существует)
400 не общая ошибка
400 Bad Request - The request could not be understood by the server due to malformed syntax.

Alexander
10.03.2017
15:33:00
при желании 400ой ошибкой можно заменить любую другую 4хх

Tigran
10.03.2017
15:33:03
Запрос не может быть понят сервером из-за неправильного синтаксиса.

Alexander
10.03.2017
15:33:06
но это будет криво и поверхностно
аналогично с 500, ею можно заменить все 5хх
ошибки 4хх - это ошибки клиента, который неправильно отправил запрос, ошибки 5хх - это ошибки сервера, который не знает, что ему делать, а запрос правильный

Tigran
10.03.2017
15:34:18
давай проектом заниматься, хватит флудить, глянь слэк))

parikLS
10.03.2017
15:34:37
/api/v1/car/123 - 200
if 200 <= response.status < 300 довольно частая проверка, впиливать туда еще и логику обработки джсона в теле не всегда хочеться

Alexander
10.03.2017
15:34:53
Тигран, ты написал ошибку, я тебя поправил) первый начал))

Tigran
10.03.2017
15:35:31
это не ошибка, это разные подходы)

Dmitriy
10.03.2017
15:35:32

Tigran
10.03.2017
15:35:39
стандарта нет

Pavel
10.03.2017
15:35:49

Tigran
10.03.2017
15:35:54
мне нравится внутренний стандарт white-house

Google

Alexander
10.03.2017
15:35:58
если очень-очень-очень поверхностно делать, то у нас всего 3 состояния "всё ок", "клиент сделал ошибку" и "сервер сделал ошибку"
200, 400, 500

Tigran
10.03.2017
15:37:28
вот, я как раз сторонник 200, 400, 500
если мой балансировщик что то отдает - пусть

Alexander
10.03.2017
15:37:51
я как раз и хочу сказать, что такой подход (поверхностный) довольно плохой, и если есть возможность указать более точно ошибку - её стоит указать

Tigran
10.03.2017
15:38:00
логику приложения я делаю с помощью этих трех

Alexander
10.03.2017
15:38:01
а не 200-400-500

Tigran
10.03.2017
15:38:17
ты все не укажешь с помощью Http кодов

Admin
ERROR: S client not available

Alexander
10.03.2017
15:38:26
поэтому когда там не 200, а 201, лучше написать 201, если этот код лучше подходит

Tigran
10.03.2017
15:38:36
тебе в любом случае понадобятся внутренние коды
зачем ориентироваться и на то и на другое?

Alexander
10.03.2017
15:38:56
да, внутренние коды нужны, это вопрос про опрятность кода
можно не следовать PEP 8, всё будет работать
но мы же следуем?

Tigran
10.03.2017
15:39:22
у пейпала несколько сотен кодов ошибок
многие ты бы не смог впихнуть под определенный http код

Alexander
10.03.2017
15:40:04
конечно, берём самый близкий

Google

Tigran
10.03.2017
15:40:19
а если их несколько?
и под то подходит и под другое

Alexander
10.03.2017
15:40:45
ну, обычно всегда есть тот, который ближе, если нет - можно регламентировать это

Tigran
10.03.2017
15:41:15
ну вот тот же пример с cars и car

Dmitriy
10.03.2017
15:41:20

Alexander
10.03.2017
15:41:23
на практике у каждой компании свой RESTful API с их собственными кодами ответа, единого стандарта тут нет

Tigran
10.03.2017
15:41:25
ты то предложил 400, то 404, то 405
да
поэтому и говорю, мне ближе white-house rest api standart

Alexander
10.03.2017
15:42:00
именно поэтому 4

Dmitriy
10.03.2017
15:42:28

Tigran
10.03.2017
15:42:48
на прикладном уровне я возвращаю:
200 - с запросом все ок
400 - чувак, у тебя там что то не так
500 - сорян, у нас что то не так

Alexander
10.03.2017
15:43:19
лично я вообще не сторонник такого API, мне нравится JSON RPC
?
там вот нет этих холиваров
про коды

Pavel
10.03.2017
15:45:07
программирование вообще какая-то холиварная отрасль. А мы - алхимики

Eugene
10.03.2017
15:46:22
Ох скок понаписали интересного (
Я не хочу перечитывать это все , много тут (
Может напишите небольшой вывод?)

Pavel
10.03.2017
15:50:12
Use three simple, common response codes indicating (1) success, (2) failure due to client-side problem, (3) failure due to server-side problem:
200 - OK
400 - Bad Request
500 - Internal Server Error
https://github.com/WhiteHouse/api-standards
Оспаривали этот подход