在 REST API 请求中指定多个项目或所有项目
Specify a number of items or all items in REST API request
我正在设计一个 API,我想知道可以指定一个数字或一个项目列表,或者只是指定它是这些项目的 'all' 个值的最佳实践。
例如,假设一个端点 /analyze 允许您针对特定类别分析文档。示例请求可能是:
{
"documentId": "my-doc",
"numberOfLines": 100,
"categories": ["category1", "category2"]
}
表示我想要所有行和所有类别的最佳方式是什么?
为相同的值设置多个类型,这样的模式似乎很糟糕:
{
"documentId": "my-doc",
"numberOfLines": "all",
"categories": "all"
}
最好用null
或-1
之类的东西表示全部。我不喜欢这样,因为如果处理程序错过了该逻辑,它可能会导致错误:
{
"documentId": "my-doc",
"numberOfLines": null, //null to mean all
"categories": null // null to mean all
}
这取决于你想鼓励什么样的行为。如果预期的默认行为是获取所有可能的过滤,我会将这些参数设为可选 - 即
{
"documentId": "my-doc",
}
将是有效的请求,并且与
的工作方式相同
{
"documentId": "my-doc",
"numberOfLines": null, //null to mean all
"categories": null // null to mean all
}
另一方面,如果您希望客户端默认限制有效载荷,仅在某些特殊用例中有人可能想要所有数据恕我直言,它的文件将引入 "magic words" 例如
{
"documentId": "my-doc",
"numberOfLines": "IReallyReallyWantAllData",
"categories": "IReallyReallyWantAllData"
}
我认为在这里使用字符串 all
没有任何问题。像 Typescript 这样的类型系统和像 JSON Schema 这样的验证系统可以很容易地表达这一点,它比空数组、-1 或 null
.
更具描述性。
使用 -1
之类的代码有点像早期的遗留问题,当时保存几个字节很重要,但很难通过观察来判断它的含义。另一个相当明显的选择是星号 *
.
我正在设计一个 API,我想知道可以指定一个数字或一个项目列表,或者只是指定它是这些项目的 'all' 个值的最佳实践。
例如,假设一个端点 /analyze 允许您针对特定类别分析文档。示例请求可能是:
{
"documentId": "my-doc",
"numberOfLines": 100,
"categories": ["category1", "category2"]
}
表示我想要所有行和所有类别的最佳方式是什么? 为相同的值设置多个类型,这样的模式似乎很糟糕:
{
"documentId": "my-doc",
"numberOfLines": "all",
"categories": "all"
}
最好用null
或-1
之类的东西表示全部。我不喜欢这样,因为如果处理程序错过了该逻辑,它可能会导致错误:
{
"documentId": "my-doc",
"numberOfLines": null, //null to mean all
"categories": null // null to mean all
}
这取决于你想鼓励什么样的行为。如果预期的默认行为是获取所有可能的过滤,我会将这些参数设为可选 - 即
{
"documentId": "my-doc",
}
将是有效的请求,并且与
的工作方式相同{
"documentId": "my-doc",
"numberOfLines": null, //null to mean all
"categories": null // null to mean all
}
另一方面,如果您希望客户端默认限制有效载荷,仅在某些特殊用例中有人可能想要所有数据恕我直言,它的文件将引入 "magic words" 例如
{
"documentId": "my-doc",
"numberOfLines": "IReallyReallyWantAllData",
"categories": "IReallyReallyWantAllData"
}
我认为在这里使用字符串 all
没有任何问题。像 Typescript 这样的类型系统和像 JSON Schema 这样的验证系统可以很容易地表达这一点,它比空数组、-1 或 null
.
使用 -1
之类的代码有点像早期的遗留问题,当时保存几个字节很重要,但很难通过观察来判断它的含义。另一个相当明显的选择是星号 *
.