在REST服务中返回true/false?

Joh*_*rth 7 rest

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

我有这个/地址服务,例如我可以做一个POST /address/validation返回xml/json true或false的东西,但对我来说这似乎是非常不合适的.

另一种方法是做一个GET /address?street=xxx&nr=xxx&zipcode=xxx(和一些更多的参数)并返回200 OK,如果正确或404 Not not found,如果不正确,这可能更RESTful?

我开始做选项1)但是我想的越多,选项2)GET感觉更好......

想法?

Jac*_*son 7

从RESTful角度来看,您实际上正在返回一个新资源,称之为AddressValidation,它将包含您的true或false值.所以一种方法是做一个POST /addressvalidation?street=xxx等等.我可以将结果作为JSON或使用状态代码返回.我不确定404是否合适; 您可能希望查看有关验证返回状态代码的讨论.

GET /address?street=xxx&nr=xxx&zipcode=xxx提出这个方法时遇到了同样的问题.对我来说,如果它返回404,这意味着字面上找不到地址(即数据库中不存在),而不是它无效(例如,邮政编码是无效的格式;不能有任何这样的地址).再次,看到链接的讨论; 似乎400是一个更恰当的回应.


Dar*_*ler 6

怎么样?

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

true
Run Code Online (Sandbox Code Playgroud)

  • @Johan显然,您可以使用任何喜欢的媒体类型。文本/纯文本非常适合返回简单的标量值。不幸的是,当前对“ xml或json”的痴迷确实失去了REST通过使用许多不同的媒体类型而带来的一些好处。 (5认同)
  • 谢谢达雷尔,它很简单,我喜欢它。不过,这超出了我们始终根据接受标头返回 xml 或 json 的正常行为。 (2认同)
  • 您可以返回一个对象,例如 `{ "result": true }` (2认同)
  • @JohnHenckel说仅通过HTTP返回“对象”还不够,因为对象的定义取决于编程语言,平台或媒体类型规范。您显示的是一个JSON表示形式,其中包含JSON定义为的对象。那你可以回来。这是矫kill过正,但是会起作用。 (2认同)