繁体   English   中英

设计采用布尔参数的REST API的正确方法是什么?

[英]What is the proper way to design a REST API that takes a boolean argument?

基本上我有这样的休息API:

/api/drive

PUT需要一个“真”或“假”的主体。

我正在使用带有Java的dropwizard框架,而boolean drive是我资源类的PUT方法中的一个参数。

一切都按预期工作,但我在Postman上进行测试,即使我在请求体中添加了像“notABoolean”这样的另一个值,请求本身仍然是成功的。 它只是把它当作“假”。 这是否符合REST原则,或者如果正文不是真/假,则抛出400 BAD REQUEST错误会更有意义吗?

这是否符合REST原则,或者如果正文不是真/假,则抛出400 BAD REQUEST错误会更有意义吗?

“这取决于”。

notABoolean

这是一个非常合理的text/plain文档,但它不是一个有效的application / json文档。

正如Mike所指出的, Boolean.valueOf("notABoolean")具有明确定义的值; 如果您以明确限制此案例的方式描述了您的API,那么您将获得所获得的内容。

至少有三种可能的状态代码可以处理这种情况。

422无法处理的实体是你似乎期待的 - 它大致转化为“是的,数据就是你所说的,但这在这里没有任何意义”。

如果你要描述你的API,只有application/json是合理的,那么这个测试可能会产生415 Unsupported Media Type (因为客户端发送text/plain )或400 Bad Request (因为notABoolean不是有效的JSON值) )。

当然,字符串是有效的json值,因此下面的有效负载可能会使您处于同一个修复程序中

"notABoolean"

这是一种可接受的类型,它是有效的,但你回到422列车上。

要让DropWizard“免费”为您返回422,请查看有关验证的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM