如果我不想更新资源,但我只是想检查某些内容是否有效(在我的情况下,是一个SQL查询),那么正确的REST方法是什么?
我还没有获得资源。我还没有PUT,POST或PATCH任何东西。我只是将表单的一部分发送回来进行验证,只有服务器可以做。另一个等价物是检查密码是否符合只能由域知道的复杂性要求,或者可能还有其他用例。
发送对象,验证,返回响应,继续表单。使用REST。有任何想法吗?我错过了什么吗?
答案 0 :(得分:2)
执行服务器端验证的正确REST方法是什么?
询问表示是否有效应该对服务器没有副作用;因此它应该是safe。
如果您要验证的表示可以在URI中表示,那么您应该更喜欢使用GET,因为它是最简单的选择,并为您提供缓存答案的最佳语义。例如,如果我们尝试使用网站为文本(例如XML或JSON验证器)创建验证API,那么我们可能会有一个带有文本区域控件的表单,并构造我们的标识符需要通过处理表单输入。
如果您要验证的表示无法在URI中表示,那么您将需要将其放入邮件正文中。
本规范范围之外的其他方法已经标准化,可用于HTTP。所有这些方法都应该在IANA维护的“超文本传输协议(HTTP)方法注册表”中注册,如第8.1节中所定义。
HTTP method registry为您提供了很多选择。对于这种情况,我不会打扰他们,除非你找到一个完美的匹配,或一个接受一个身体并且足够接近的safe方法。
所以可能 REPORT,在RFC 3253中定义;我倾向于避开WebDAV方法,因为我不习惯在他们的职权范围之外扩展“远程Web内容创作操作”的规范。
答案 1 :(得分:1)
TLDR;围绕通过REST创建验证端点的主题有duplicate question:
在您的情况下,GET请求似乎已足够。
HTTP GET方法用于读取(或检索)资源的表示。在“快乐”(或非错误)路径中,GET以XML或JSON格式返回表示形式,并返回HTTP响应代码200(OK)。在错误情况下,它通常返回404(NOT FOUND)或400(BAD REQUEST)。
为了验证您的SQL查询,您可以使用GET请求来获取查询的有效状态,可能使用查询参数来实现此目的。
获取:api / validateQuery?query =" SELECT * FROM TABLE"
返回:
答案 2 :(得分:1)
我认为这种类型的端点最适合作为POST请求。如spec中所定义,POST请求可用于
将数据块(例如输入HTML表单的字段)提供给数据处理过程
对于我来说,在另一篇文章中建议使用GET,这是基于复杂性和其他方面的误导和不切实际的做法。 SQL查询的任意性。