在 REST 服务中返回真/假?

Posted

技术标签:

【中文标题】在 REST 服务中返回真/假?【英文标题】:Returning true/false in REST service? 【发布时间】:2011-08-14 18:55:01 【问题描述】:

我正在设计一个 REST 服务,需要检查地址是否输入正确。我正在考虑的是如何设计一个 REST 接口来检查完整的街道地址是否有效。

我有这个 /address 服务,例如,我可以做一个 POST /address/validation,它返回一个 xml/json 真或假,但对我来说这似乎很不符合 REST 风格。

另一种方法是执行GET /address?street=xxx&nr=xxx&zipcode=xxx(以及更多参数),如果正确则返回 200 OK,如果不正确则返回 404 Not found,这可能更符合 REST 标准?

我开始做选项 1),但我越想,选项 2) 使用 GET 感觉更好......

想法?

【问题讨论】:

【参考方案1】:

从 RESTful 的角度来看,您实际上是在返回一个新资源,称为 AddressValidation,它将包含您的真值或假值。因此,一种方法是对/addressvalidation?street=xxx 等进行 POST。我可以将结果作为 JSON 返回或使用状态码。不过,我不确定 404 是否合适;你可能想看看this discussion of validation return status codes。

我对@9​​87654323@ 方法有同样的问题,就像你提出的那样。对我来说,如果它返回 404,这意味着实际上找不到地址(即数据库中不存在),而不是它是无效的(例如,邮政编码是无效格式;不可能有任何这样的地址)。再次,请参阅链接的讨论;似乎 400 是更合适的响应。

【讨论】:

谢谢雅各布。我们实际上要在这里测试两件事——地址格式是否正确,然后我们检查地址是否真的存在。正如你所说,这是两个不同的东西,应该返回不同的代码/数据。【参考方案2】:

怎么样?

GET /addressValidity?street=xxx&nr=xxx&zipcode=xxx
=> 
200 OK
Content-Type: text/plain

true

【讨论】:

谢谢达雷尔,它很简单,我喜欢它。但是,它超出了我们总是返回 xml 或 json 依赖于接受标头的正常行为。 @Johan 显然你可以使用任何你喜欢的媒体类型。 Text/plain 非常适合返回简单的标量值。不幸的是,当前对“xml 或 json”的痴迷确实失去了 REST 所带来的一些好处,因为它能够使用许多不同的媒体类型。 可以返回一个对象,比如 "result": true @JohnHenckel 说您可以通过 HTTP 返回一个“对象”是不够的,因为对象的定义取决于编程语言、平台或媒体类型规范。您展示的是一个 JSON 表示,其中包含 JSON 定义为对象的内容。你可以回来。这是矫枉过正,但它会工作。【参考方案3】:

我觉得做 POST 并返回状态码(如果正确,则返回 200 OK,如果不正确,则返回 404 Not found)更安静。因为你没有得到一些 GET 看起来不合适的东西。您正在向服务器发布一些信息,它会进行一些处理(验证)并返回一些响应。

【讨论】:

如果你问我,POST 看起来没有任何好处。 RFC 声明“POST 方法用于请求源服务器接受请求中包含的实体作为请求行中的请求 URI 标识的资源的新下级” 这种情况下Get比POST好,因为操作是幂等的

以上是关于在 REST 服务中返回真/假?的主要内容,如果未能解决你的问题,请参考以下文章

重击“如果 [假];”返回真而不是假——为啥?

如何在角度2中动态地在输入框上添加工具提示

MySQL:返回“0”和“1”而不是“假”和“真”

EXCEL函数。 如果A1等于1-50数据中的任何一个, 则A2返回“真”, 否则返回“假”, 如何设置函数。

在 postgresql 查询中检查布尔真/假结果

如何读取数组中所有函数的布尔值(真/假)