-
Notifications
You must be signed in to change notification settings - Fork 205
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Некорректное кодирование параметров запроса #138
Comments
Спасибо за PR! Но я не уверен, что готов его принять в текущей реализации Автоматическая конвертация в строку зависит от текущей локали операционной системы, и полагаться на нее не стоит. |
Из этой ситуации существуют два выхода:
@alexandr-yang я в комите оставил маленькое замечание, при исправлении которого поведение станет максимально корректным и для формата multipart/form-data. Заранее буду признателен за любой ответ на этот комментарий. |
Есть еще третий - оставить конвертацию по стандартной для платформы схеме: в соответствии с локалью операционной системы. т.е. так как работает сейчас. Я с уважением и благодарностью отношусь к труду всех кто присылает PR, но необходимость такой конвертации самой библиотекой сейчас не достаточно аргументирована. Для разных случаев нужны разные значения, форсировать библиотекой какие-то одни я не считаю коректным. Стандартная конвертация с учетом локали - достаточно привычное поведение платформы, что передать в качестве значения - ответственность программиста. Я приглашаю к обсуждению и аргументации |
Как по мне, там логика немного сломана. Метод ПодготовитьТелоЗапроса используется не по назначению. |
оно логичное только в рамках одной "предметной" области. В другой логично будет другое, я приводил выше пример с 0 и 1 как булево и unixtime. В JSON, который ближе к web, например, формат даты не стандартизирован, хотя и часто используется unixtime. Я не могу не отметить изящество в краткости преобразования с помощью XMLСтрока, но само по себе это не аргумент в пользу такого преобразования P.S. Есть еще другой контраргумент - на текущее поведение кто-то мог завязаться, и таким изменением мы можем сломать людям код. Да, это не документированный сайд-эффект, но все же. |
Что-то сломаться может, тут согласен. В остальном нет. Преобразование булева к числу - это скорее всего костыль, как со стороны сервера, так и со стороны клиента. В вебе чаще всего отправляют true и false. Но это все холивар. Другой вариант, можно значение пропустить через ОбъектВJson, будет по сути то же самое. А кастомные настройки можно передать через ПараметрыПреобразования (как это сделать красиво - тоже вопрос). Вариант будет более гибкий, но проблему с совместимостью он не решит. |
Не холивар, нормальное обсуждение. Повторюсь, у меня нет цели отказать в PR, цель - обсудить и понять насколько это изменение приемлемо. В вебе часто применяют и числа: true и false часто появляются там где JS фреймворки, потому что такое им проще парсить в объекты JS. Но стандарта на это нет, поэтому я считаю форсировать какое-то соглашение здесь не стоит, это не обязанность библиотеки. И типовое поведение библиотеки здесь - использовать стандартную для платформы сериализацию - вполне нормально. |
Да я тоже не настаиваю в мерже, просто предлагаю решения на основе своего опыта. В общем, решайте. Если нужно будет сделать правки - мне не сложно) |
Выражу мнение как разработчик, использующий библиотеку: это изменение улучшит лаконичность используемых методов и для разработчика 1С такое приведение значений параметров будет ожидаемым. И можно сказать точно, что Истина/Ложь в виде строки URLEncoded ни в каких кейсах не нужны. Как и Символы.НПП как разделитель триад в числе. С приведением дат к формату yyyy-mm-dd тоже гораздо более ожидаемо, чем формат определяемый локалью. |
полностью согласен |
Кажется что исправление пользы приносит больше чес вреда. То что коннектор не дает гарантий на автосериализацию в нужном разработчику формате так это и раньше так было. То что коннектор станет давать лучшую автоконвертацию чем была факт. А кому надо те как раньше доконвертят вручную. Важно что меняется обратная совместимость а значит исправление требует поднятие мажорной версии и отражения в BREAKING CHANGE к выпуску. |
Наткнулся на просторах гитхаба, связано с темой обсуждения |
Предлагаю компромисс: вводим отдельный метод и\или параметр, отвечающий за сериализацию. Таким образом мы сохраним текущее поведение и дадим возможность менять сериализацию параметров как каждому удобно.
|
В функции КодироватьПараметрыЗапроса происходит неявное приведение к типу Строка значения параметра в вызове КодироватьСтроку
ЗначениеПараметра = КодироватьСтроку(Значение, СпособКодированияСтроки.КодировкаURL);
В случае кодирования параметров запроса для тела запроса Content-type="multipart/form-data" не требует кодировки URL, что касается и типа Строка, и других типов.
The text was updated successfully, but these errors were encountered: