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

时间:2018-11-08 17:54:26

标签: java rest

基本上我有一个像这样的REST API:

/api/drive

PUT的主体为“ true”或“ false”。

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

一切正常,但是我在Postman上进行了测试,看看即使我在请求正文中放入了另一个值“ notABoolean”,请求本身仍然成功。它只是将其视为“假”。这是否符合REST原则,或者如果正文不是true / false,则抛出400 BAD REQUEST错误更有意义吗?

1 个答案:

答案 0 :(得分:0)

  

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

“取决于”。

notABoolean

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

如Mike所述,Boolean.valueOf("notABoolean")具有明确定义的值;如果您以明确限制这种情况的方式描述了API,那么您将获得所得到的。

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

422 Unprocessable Entity是您似乎一直期望的-粗略地翻译为“是的,数据就是您所说的,但这在这里实际上没有任何意义”。

如果要描述您的API以使仅application/json是合理的,则此测试可能会生成415 Unsupported Media Type(因为客户端发送了text/plain)或{{3} }(因为notABoolean不是有效的JSON值)。

当然,字符串是有效的json值,因此下面的有效负载可能会使您陷入同一困境

"notABoolean"

这是可以接受的类型,并且有效,但是您又回到了422火车上。

要让DropWizard“免费”为您退还422,请查看400 Bad Request上的文档。