在REST服务中返回true / false?

时间:2011-04-28 14:37:42

标签: rest

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

我有这个/地址服务,我可以做一个POST /address/validation,它返回一个xml / json的真或假,但对我来说似乎是非常不合适的。

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

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

想法?

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:4)

怎么样?

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

true

答案 2 :(得分:-2)

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