URI查询中的布尔值?

Cli*_*int 26 url uri http

在URI的查询部分中指定布尔值的首选方法是什么?普通的查询字符串看起来像

a=foo&b=bar
Run Code Online (Sandbox Code Playgroud)

假设我有一个带有布尔值的参数"c",我应该说明

a=foo&b=bar&c=1
Run Code Online (Sandbox Code Playgroud)

要么

a=foo&b=bar&c=True
Run Code Online (Sandbox Code Playgroud)

要么

a=foo&b=bar&c=true
Run Code Online (Sandbox Code Playgroud)

我检查了RFC 2396的查询组件部分,但没有指定如何表示布尔参数.所以我想知道的是通常(或合理)的方式是什么?

Jia*_*ang 26

使用布尔参数的键存在性,例如?foo

例如,使用?foo代替?foo=true.

我更喜欢这种方式,因为我不需要浪费时间去思考或追踪源代码是否应该是true1enableyes或任何超出我想象的东西。

在区分大小写的情况下,应该是trueorTrue或 吗TRUE

在词干提取的情况下,应该是enable还是enabled

恕我直言, 的形式?foo是将布尔变量传递给服务器的最优雅的方式,因为它只有 2 种状态(存在或不存在),这对于表示布尔变量很有好处。

这也是 Elasticsearch 对布尔查询参数的实现方式,例如:

GET _cat/master?v
Run Code Online (Sandbox Code Playgroud)

  • 有时,缺席和假时的行为是不同的。例如显示所有用户。显示 active = false 的所有用户,显示 active = true 的所有用户。 (4认同)

Pet*_*nov 17

它完全取决于您读取查询字符串的方式.您要求的所有这些都是有效的.


nic*_*las 7

在带有快速服务器的节点中,您可以添加一个布尔解析器中间件,如express-query-boolean

var boolParser = require('express-query-boolean');

// [...] 

app.use(bodyParser.json());
app.use(boolParser());
Run Code Online (Sandbox Code Playgroud)

没有

// ?a=true&b[c]=false 
console.log(req.query);
// => { a: 'true', b: { c: 'false' } } 
Run Code Online (Sandbox Code Playgroud)

// ?a=true&b[c]=false 
console.log(req.query);
// => { a: true, b: { c: false } } 
Run Code Online (Sandbox Code Playgroud)

  • 请注意,express-query-boolean 将递归地解析所有参数并将任何“类似布尔”的输入强制为布尔值。 (2认同)