我有一个API,它有超过6个字段的自定义搜索,大致如下所示,尽管我在其他地方使用相同类型的搜索时,也可能包含敏感数据。
我通常使用RESTful方法,因此对于用户列表或单个用户,检索用户将类似如下所示
GET /user
GET /user/1
然而,对于搜索,我对如何允许这一点略感困惑。我的初衷是在请求体中使用JSON,例如
{
"username": "someuser",
"department": "sales"
}
不过,我不能使用看起来合乎逻辑的请求体(以及用于POST等操作的请求体),因为据我所知,Chrome不支持它(或者至少不支持用于测试的PostMan插件)。
因此,执行此搜索的最佳方式是什么?
我看到的选择
使用报头
这似乎是头的“错误”使用,但也是最接近于O刚al请求体的。
使用中的参数
例如
GET /user?username=someuser&department=sales
但是控制器(使用C# Web )会变得很混乱,因为我不能将项目保留为空白。所以请求会更像这样,除非我有大量被覆盖的方法来处理不同的排列。这看起来..。凌乱的
GET /user?username=someuser&email=&firstname=&lastname=&department=
也许更重要的是,它留下了一点太明显的“背靠背”:这是在医疗保健环境中,虽然有不可避免的时间显示的东西,我宁愿保持在最低限度(数据本身,自然是SSL加密传输)。
使用不同的HTTP谓词
我可以使用POST或其他动词,但这是违反直觉的,并且违背了RESTful方法(据我所知)和我自己在项目中的标准,所以可能会令人困惑。
还有其他人碰到这个吗?什么是“官方”或最好的方法来处理它?
发布于 2016-02-18 17:08:56
没有真正的“官方”方式。在这种情况下,我只会稍微扭曲休息的规则,只使用一个post,传入一个身体就是POST方法的作用。
对于来自Chrome的不支持:这在Chrome以及PostMan扩展中都是完全支持的(您需要选择一个POST方法并为主体选择raw选项,然后选择JSON)
另一方面,查询字符串也是一个很好的选择。通过在控制器中使用默认参数,可以拥有空项:
public ActionResult Search(string userName = "", int departmentId = 0)
{
...
}
https://stackoverflow.com/questions/35487725
复制相似问题