我正在开发一个RESTful Web应用程序。现在我想扩展read(GET)请求以处理类似SQL的查询,但是我无法将它们编码到URL中,因为所有特殊字符(“”,“/”,“<”,“> “,”{“,”}“等)。我已经读过,在GET请求中使用消息正文并不是一个好主意。所以目前我看到的唯一选择是使用POST请求。但是我会说这不是一个好的解决方案,因为我会使用POST进行读取操作。根据REST原则,读取应该由GET请求完成,POST应该仅用于操作数据。
你怎么看?将类似SQL的查询发送到我的Web应用程序的最佳方法是什么?非常感谢
答案 0 :(得分:2)
使用 CGI :: escape(“select * from NEVER_DO_SUCH_THINGS where SQL_INJECTION>'unsafe'”)
答案 1 :(得分:0)
有关如何将查询操作填充到URI中的一个示例,请参阅OData URI Conventions。
但是,您过度约束POST的使用。 HTTP方法的想法是,当一个请求的特征符合GET,PUT和DELETE的特征时,你应该使用它们。如果特征不匹配,您绝不使用它们。但是,POST是一种可用于任何请求的通配符方法。
不要求POST必须以任何方式编写,更新或操作数据。通过告诉客户端它需要使用POST方法,您就不会向客户端做出有关服务器行为的任何承诺。
使用POST提交要用于查询的数据块没有任何问题。缺点是POST的响应没有缓存,因此你无法利用它。
有许多混合方法,其中之一是POST查询参数,让服务器创建一个代表查询的新临时资源,然后返回重定向,以便客户端对临时查询资源进行获取。