Как отправить NULL в строке запроса HTTP?
я разрабатываю API, который может принимать три основные типы данных в качестве значений для параметров строки запроса: boolean
, string
& numeric
(integer
или float
). По умолчанию все извлекается строкой (я не думаю, что есть способ обойти это), но параметры настроены с типом, чтобы я преобразовал их в правильный тип.
теперь мне нужно начать принимать NULL как значение для всех трех типов данных, но я не уверен, что это лучший способ сделать так.
некоторые люди, похоже, не принимают значения как NULL (?param
, без =
), но это не совсем работает для меня:
- я уже принимаю это как
true
для логических значений, хотя это можно изменить. - он получен как пустая строка, которая является допустимым значением для
string
тип данных.
Итак, вот только два варианта, которые я вижу, ни один из которых не работает для меня:
- использовать a постоянный, как
"NULL"
или"~"
. Это работает для логических & чисел, но не для строк, так как это может быть желаемое строковое значение. - используйте пустое значение. Еще раз, это может работать для booleans & numbers, но не для строк, так как это может быть желаемое строковое значение.
кажется, что использование константы может быть моим единственным выбором, и чтобы избежать проблем, которые константа может быть запрещена из строк. Но разве это единственный жизнеспособный вариант? Я хотел было более эффективный способ. :(
редактировать: у меня была еще одна идея, которая могла бы сработать, но я не уверен, как это будет воспринято. Я думаю, что это определенно нарушает стандарты, и многим людям это, скорее всего, не понравится, но исправит мою проблему лучше, чем любое другое решение до сих пор. В принципе, идея заключалась бы в использовании JSON, который поддерживает собственные типы данных. У меня нет этой проблемы с запросами POST, потому что они используют JSON.
так что идея было бы взять JSON в строке запроса, в основном позволяя альтернативную строку запроса, которая переопределит стандартную HTTP. Что-то вроде: ?_json={"foo":"bar","param":null}
вместо ?foo=bar¶m=~
. Или, может быть, даже полностью взять на себя строку запроса:?{"foo":"bar","param":null}
.
2 ответов
отправьте значение NUL URLEncoded (%00) для любой вещи, которую вы специально устанавливаете в null. Он должен быть правильно расшифрован URL.
или просто не отправляйте значение .. оставьте значение параметра запроса пустым в url-адресе запроса get.. как -
API URL/?foo= & some_other_param=значение
в API foo будет получен как null