Java 设计采用布尔参数的RESTAPI的正确方法是什么?
基本上我有一个rest API,如下所示:Java 设计采用布尔参数的RESTAPI的正确方法是什么?,java,rest,Java,Rest,基本上我有一个rest API,如下所示: /api/drive 它需要一个体来表示PUT,它是“true”还是“false” 我在Java中使用dropwizard框架,boolean drive是我资源类的PUT方法中的一个参数 一切都按预期进行,但我在Postman上进行了测试,发现即使我在请求体中添加了另一个值,如“notABoolean”,请求本身仍然是成功的。它只是把它当作“假”。这是否符合REST原则,或者如果正文不是真/假,抛出400错误请求是否更有意义 这是否符合REST原则
/api/drive
它需要一个体来表示PUT,它是“true”还是“false”
我在Java中使用dropwizard框架,boolean drive
是我资源类的PUT
方法中的一个参数
一切都按预期进行,但我在Postman上进行了测试,发现即使我在请求体中添加了另一个值,如“notABoolean”,请求本身仍然是成功的。它只是把它当作“假”。这是否符合REST原则,或者如果正文不是真/假,抛出400错误请求
是否更有意义
这是否符合REST原则,或者如果主体不是真/假,抛出400错误请求错误是否更有意义
“视情况而定”
这是一个非常合理的text/plain
文档,但它不是有效文档
正如Mike所指出的,Boolean.valueOf(“notABoolean”)
有一个定义良好的值;如果您以一种显式限制这种情况的方式描述了您的API,那么您将得到您所得到的
至少有三种可能的状态代码可以处理此情况
这就是你所期待的——它大致可以翻译为“是的,数据就是你所说的,但这在这里真的没有任何意义”
如果您要描述您的API,使得只有application/json
是合理的,那么此测试可能会产生(因为客户端发送text/plain
)或(因为notABoolean
不是有效的json值)
当然,字符串是有效的json值,因此下面的有效负载可能会使您陷入相同的困境
"notABoolean"
这是一种可以接受的类型,它是有效的,但是你回到了422列车上
要让DropWizard“免费”为您返回422,请查看上的文档。如果将非布尔值视为
false
值,则可以。让API超严格是不好的,因为这会让使用它的人很难理解。如果类型真的不应该被允许的话,只抛出400个错误请求<代码>“True”
,1
,True
被转换为布尔值True
,只要您的API契约指定了该行为,就可以遵循REST库所做操作的基本语义(即boolean.valueOf()
)。400似乎有些过分,因为你可以清楚地处理简单的真与假之外的值;只有当值完全丢失时才返回400才更有意义。
"notABoolean"