我有一个 API 可以自定义搜索超过六个字段,类似于以下内容,但也可能包含敏感数据,因为我在其他地方对相同类型的搜索使用相同的方法
- 用户名
- 电子邮件
- 名
- 姓
- 部门
我通常使用 RESTful 方法,因此对于用户列表或单个用户,检索用户将类似于以下内容
GET /user
GET /user/1
但是,对于搜索,我对如何允许这样做感到有些困惑。我的初衷是在请求正文中使用 JSON,例如
{
"username": "someuser",
"department": "sales"
}
但是,我不能使用看起来合乎逻辑的请求正文(以及用于 POST 等操作),因为据我所知,Chrome 不支持它(或者至少 PostMan 插件不支持,我们用于测试)
因此,执行此搜索的最佳方式是什么?
我看到的选项
使用标题
这似乎是标头的“错误”使用,但也是最接近原始请求正文的
在 URL 中使用参数
例如
GET /user?username=someuser&department=sales
但这会使控制器变得混乱(使用 C# Web API),因为我不能将项目留空。所以请求会更像这样,除非我有大量的重写方法来处理不同的排列。这似乎......凌乱
GET /user?username=someuser&email=&firstname=&lastname=&department=
也许更重要的是,它在“肩膀上”留下了太多可见的东西:这是在医疗保健环境中,虽然不可避免地会显示一些东西,但我宁愿将其保持在最低限度(数据本身自然是, SSL 在传输过程中加密)
使用不同的 HTTP 动词
我可以使用 POST 或其他一些动词,它们会起作用,但违反直觉,并且与 RESTful 方法(据我所知)和我自己在项目中的标准背道而驰,因此可能会造成混淆。
有没有其他人遇到过这个?处理它的“官方”或最佳方式是什么?