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