JSON验证的正确名称和http方法REST端点
问题描述:
我想实现一个REST端点,其通用目的是验证JSON格式的复杂实体。JSON验证的正确名称和http方法REST端点
因此,第一个问题是应该使用哪种HTTP方法?我们不能将GET方法放入正文中。 POST和PUT是在对数据库进行某些更改时应使用的方法,但验证不会做任何更改。
而第二个问题是什么资源名称可以适合这样的端点?
答
POST和PUT之间的主要区别在于PUT是幂等而POST不是。
所以,问题是,如果你运行两次相同的验证请求,你会期望有不同的结果吗?我猜不,所以PUT可能是最好的选择。
我想要有效地使用RESTful,其中一个约束是端点应该定位您想要处理的资源,HTTP方法指示您想要处理的资源。所以你的情况,我会亲自选择:
PUT /api/v42/validation
由于@RomanVottner建议,你也可以通过考虑每个请求为“新的验证报告生成”解决这一需求,在这种情况下,POST会更合适:
POST /api/v42/validations
无论如何,你面对的这些边缘情况下,REST需要有点扭捏一个,因为这需要的是CRUD世界之外。
答
我的一般规则是..当你需要一个完整的JSON体时,请使用POST。
有一个像/ validateJSON之类的post方法,GET不行,PUT没有意义,所以继续POST。
参考:Which REST operation (GET, PUT, or POST) for validating information?
干杯。
我会选择'POST',因为操作的语义是由API开发人员定义的。 'PUT'的语义是:“用请求发送的主体替换给定资源当前可用的状态”。作为验证服务显然不能取代当前状态,'POST'可能更适合。一般来说,HTTP的瑞士军刀“POST”它可以用来启动进程而无需创建实际的资源,尽管它的用例通常局限于典型的创建操作,但会将REST的意图与CRUD操作相混淆。 –
@RomanVottner您提出了一些要点,'POST/api/v42/validations'也可以很好地满足OP的需求,就好像每次都会生成一个新的验证报告。 OP会遇到其中一个REST需要稍微调整的边缘情况;) – sp00m