RESTful API:什么METHOD / HEADER组合用于仅验证

时间:2012-05-18 00:11:40

标签: web-services api rest

我希望我的API有一个仅验证请求。例如,如果我有一个URL,例如:

http://api.somesite.com/users/12345

并且用户正在填写客户端上的一种信息,我最终将PATCH / PUT / POST到该资源。当用户填写表单时,我可能希望定期将部分完整的更新表示发送到服务器,以便我可以显示其输入的实时验证(例如,“已经使用了该用户名”,“该密码是太短了“)。

没有标准的HTTP METHOD或HEADER似乎允许在同一资源上执行此行为。看来我的选择是:

  1. 创建新的下级资源以进行验证
  2. 使用自定义标头(仅限x-somesite-validation)和PUT表示我要验证但不保存

2 个答案:

答案 0 :(得分:4)

一些选项

1)使用自定义标题
2)在查询字符串中添加一些内容,指示仅验证
3)使用Action URl,例如\ IndividualClient \ 123 \ actions \ Validate \ Invoke {section 19 here http://restfulobjects.files.wordpress.com/2011/11/restful-objects-spec-052.pdf}
4)分层URL,例如\ IndividualClient \ 123 \ Validation

从这post我找到了这个建议

  

每当你必须做一些感觉类似于RPC的事情时,请使用POST   使用GET进行计算之类的事情,除非输入很大   哪种情况使用POST

     

关于您的具体问题,POST应该用于#4和#5。这些操作落在上面的“RPC-like”指南之下。对于#5,请记住POST不一定必须使用Content-Type:application / x-www-form-urlencoded。这可以很容易地成为JSON或CSV>有效载荷。

以下是我正在考虑的事项:

这是资源的添加:
用户/验证
POST
要求:UserResource
回应:为ValidationResult
响应代码200,400。404. 500

这是资源的更新
用户/ 204 /验证
POST
要求:UserResource,
回应:为ValidationResult 响应代码200,400。404. 500

答案 1 :(得分:0)

Thrid选项是在客户端上实现验证功能。然后,当需要特定信息时,此功能将发送特定请求。

例如,您实际上不需要发送检查密码是否太短的请求。但您可以发送一个请求来检查用户名是否存在。

这是使用Ajax进行验证的方法,其中btw正在使用Restful API(HTTP):)