【发布时间】:2015-07-06 19:53:28
【问题描述】:
我正在开发一个 API,它可以接受主要的三种数据类型作为查询字符串参数的值:boolean、string 和 numeric(integer 或 float)。默认情况下,所有内容都检索一个字符串(我认为没有办法解决),但参数配置了一个类型,以便我将它们转换为正确的类型。
我现在需要开始接受 NULL 作为所有三种数据类型的值,但我不确定最好的方法是什么。
有些人似乎不接受任何值为 NULL(?param,没有 =),但这对我来说不太适用:
- 我已经接受
true表示布尔值,尽管这可以更改。 - 它以空字符串的形式接收,这是
string数据类型的有效值。
所以,这是我能看到的仅有的两个选项,没有一个对我有用:
- 使用常量,如
"NULL"或"~"。这适用于布尔值和数字,但不适用于字符串,因为这可能是所需的字符串值。 - 使用空值。再一次,这适用于布尔值和数字,但不适用于字符串,因为这可能是所需的字符串值。
似乎使用常量可能是我唯一的选择,为了避免字符串可以禁止常量的问题。但这真的是唯一可行的选择吗?我希望有更好的方法。 :(
编辑:我刚刚有了另一个可能可行的想法,但我不确定它会被如何看待。我认为它肯定违反了标准,很多人很可能不喜欢它,但它比迄今为止的任何其他解决方案都能更好地解决我的问题。基本上,这个想法是使用支持本机数据类型的 JSON。我对 POST 请求没有这个问题,因为它们使用的是 JSON。
因此,我们的想法是在查询字符串中采用 JSON,基本上允许使用替代查询字符串来覆盖标准 HTTP 字符串。类似:?_json={"foo":"bar","param":null} 而不是 ?foo=bar&param=~。或者甚至可以完全接管查询字符串:?{"foo":"bar","param":null}。
【问题讨论】:
-
你不能只发送一个 URLEncoded NUL 值吗? (%00)?由于它是一个查询参数,它在 URL 中,应该被解码。
-
Kylar 的建议似乎是被接受的方法。请参阅此处以供参考:w3schools.com/tags/ref_urlencode.asp
-
@Kylar:哇,谢谢,我从没想过,不知道这是公认的方法。介意将其发布为答案吗?我会接受它作为正确的解决方案。