Как отправить NULL в строке запроса HTTP?

я разрабатываю API, который может принимать три основные типы данных в качестве значений для параметров строки запроса: boolean, string & numeric (integer или float). По умолчанию все извлекается строкой (я не думаю, что есть способ обойти это), но параметры настроены с типом, чтобы я преобразовал их в правильный тип.

теперь мне нужно начать принимать NULL как значение для всех трех типов данных, но я не уверен, что это лучший способ сделать так.

некоторые люди, похоже, не принимают значения как NULL (?param, без =), но это не совсем работает для меня:

  1. я уже принимаю это как true для логических значений, хотя это можно изменить.
  2. он получен как пустая строка, которая является допустимым значением для string тип данных.

Итак, вот только два варианта, которые я вижу, ни один из которых не работает для меня:

  1. использовать a постоянный, как "NULL" или "~". Это работает для логических & чисел, но не для строк, так как это может быть желаемое строковое значение.
  2. используйте пустое значение. Еще раз, это может работать для booleans & numbers, но не для строк, так как это может быть желаемое строковое значение.

кажется, что использование константы может быть моим единственным выбором, и чтобы избежать проблем, которые константа может быть запрещена из строк. Но разве это единственный жизнеспособный вариант? Я хотел было более эффективный способ. :(

редактировать: у меня была еще одна идея, которая могла бы сработать, но я не уверен, как это будет воспринято. Я думаю, что это определенно нарушает стандарты, и многим людям это, скорее всего, не понравится, но исправит мою проблему лучше, чем любое другое решение до сих пор. В принципе, идея заключалась бы в использовании JSON, который поддерживает собственные типы данных. У меня нет этой проблемы с запросами POST, потому что они используют JSON.

так что идея было бы взять JSON в строке запроса, в основном позволяя альтернативную строку запроса, которая переопределит стандартную HTTP. Что-то вроде: ?_json={"foo":"bar","param":null} вместо ?foo=bar&param=~. Или, может быть, даже полностью взять на себя строку запроса:?{"foo":"bar","param":null}.

2 ответов


отправьте значение NUL URLEncoded (%00) для любой вещи, которую вы специально устанавливаете в null. Он должен быть правильно расшифрован URL.


или просто не отправляйте значение .. оставьте значение параметра запроса пустым в url-адресе запроса get.. как -

API URL/?foo= & some_other_param=значение

в API foo будет получен как null