заебал мудацкий велосипедо-дизайн XML-«протокола», повторяющего функции HTTP (и присылаемого исключительно по HTTP POST) @ засублимировал фрустрацию в гимпе http://i.imgur.com/ynz2HbQ.jpg
@etw Дополнительная беда в том, что он здесь используется не просто для передачи *данных*. В схему сорта-конфигурационной якобы БД коллеги-быдлокодеры неконтролировано суют всё, что угодно:
* статус завершения запроса (скажем, меня сейчас упорно и настойчиво ебут за попытку вернуть HTTP 403 на неавторизированные запросы, заставляя возвращать 200 OK с телом из иксэмэля с тэгом `<ValidationError ...>`);
* собственно, сам запрос, — то, что должно было бы передаваться HTTP методом в сочетании с путем из URI; рядышком с атрибутами данных в элементах приходят атрибуты `Action="GET"`, `Action="SET"` и ещё пачка других, ебанутых (см. *«неконтролировано суют всё, что угодно»*) — например, `Action="GET_STATUS"`.
Притом во всём этом хочется обвинить ёбаный C++. Если бы в нём был *хоть какой-нибудь* парсер иксэмэля, мудачьё с NIH-синдромом не стало бы велосипедировать свои недопарсеры (о которых мне вообще стоит помолчать сейчас), которые позволяли бы вхуяривать в себя произвольной уёбищности костыли. Если бы в нём была хоть какая-нибудь либа для HTTP, мудачьё с NIH-синдромом не стало бы гонять XML по дибасу, пытаясь при этом сделать из схемы данных *СОБСТВЕННЫЙ ПРОТОКОЛ*, ебать мою макушку паровозом. Если бы в C++ не было уймы говна для поддержки отсталых на полвека дебилов, возможно, хоть половина этой команды умела бы читать мануалы и стандарты (по той же XSD схеме, например, или по XPath), или хотя бы, блядь, искать ответы на stackoverflow.
@ulidtko >скажем, меня сейчас упорно и настойчиво ебут за попытку вернуть HTTP 403 на неавторизированные запросы, заставляя возвращать 200 OK с телом из иксэмэля с тэгом `<ValidationError ...>`
правильно делают, я тоже бы ебал за нарушение инкапсуляции между уровнями.
200 OK значит что транспортный уровень отработал ок, а вот уровнем выше какая-то пизда вылезла
@hate-engine
> между браузером и вебприложением
на самом деле TCP — транспортный уровень; скажи, зачем я тебе, тупице, что-то до сих пор объясняю?
я ведь всего лишь хотел показать прикольную картинку, которую сам сделал.
@ulidtko >заставляя возвращать 200 OK с телом из иксэмэля с тэгом <ValidationError ...>);
и таки щито ты будешь делать, если кроме 403 и 200 у тебя вылезет состояние, не описываемое стандартными кодами HTTP?
и щито ты будешь делать, если состояние описывается (например 401), но юзер-агент от него хуеет или пытается обработать самостоятельно (302)?
@muromec там три с половиной ебаных состояния («ОК», «ОП хуй», «мамку ебал») (попробуй, блядь, придумай больше — для ссаной конфигоБД на иксемелях-то), обыкновенных статускодов там хватит всем
@ulidtko // Однажды в лаборатории Джеймса Франка в Гёттингене сложный экспериментальный прибор для изучения атомных явлений по совершенно необъяснимой причине вышел из строя. Франк написал о случившемся Паули в Цюрих. В ответ пришло письмо с датской маркой, в котором Паули писал, что он ездил проведать Нильса Бора, и во время загадочного происшествия в лаборатории Франка поезд, в котором ехал Паули, как раз совершал остановку в Гёттингене
@hate-engine У меня часто встречались коллеги, пытающиеся всеми методами делать примерно то же самое на уровне HTTP+JSON, мол, возвращать 200 OK, внутри которого
{'status': 'error', 'reason': 'Object Does not Exist'}
И в таком духе.
@kurkuma Ну, как-то так. Получается потом код типа
if (is_error_response(response) or (is_ok_response(response) and response['data']['ok'] == False): ...
@kb нет, например
$.get('https://bnw.im/api/show', {message:'Z7O4ID'})
.done(function (data) {
if (data.ok) {
//все норм
} else {
//поста не существует
}
}).fail(function () {
//бнващ лежит
});
@kurkuma они дважды обрабатывают "всё норм", сначала в .done(), а потом еще раз в data.ok. Нахуя? Почему не сделать .done() эквивалентом "всё норм"? Внутри .fail(), если интересно, можно проверить код 404 для "поста не существует", другой код для хуёво введенных данных (и в нём же вывод ошибок формы, снова-таки универсальный), третий код для "бнвач лежит". Я уж не говорю о том, что возможно 404 иногда, всё же, надо будет обрабатывать (скажем, из-за особенностей фреймворка), тогда вообще дублирование происходит полное.
@kurkuma ```
$.get('https://bnw.im/api2.0/show', {message:'Z7O4ID'})
.done(function (data) {
// все норм
}).fail(function(rq) {
if (rq.status === 404) {
// поста не существует
} else {
// бнващ лежит
}
});
```
Каково это, забивать API сервисами, дублирующими сервисы HTTP?
@kurkuma «бнващ лежит» — это любой HTTP статус из диапазона пятсотых, 500–599. Так диктует стандарт.
Диапазон 400–499 — это хуевый запрос/ошибка юзерагента. Опять же, специально придумано крутыми дядьками (ещё наверное где-то в 80-х — и до сих пор работает!).