可以在RESTful中传递等号吗?

时间:2012-08-27 00:51:33

标签: php database rest restful-url

我的RESTful界面正常工作,直到我尝试传递WHERE语句

示例:

传递的周长:

SELECT = "this";
FROM = "that";
WHERE = " 'ID' = 332";

网址可能如下所示

www.example.com/rest.php?SELECT=this&FROM=that&WHERE='ID'=332

然后在我的PHP脚本

if (isset($_GET['SELECT']))
{
    $SELECT = $_GET['SELECT'];
}
if (isset($_GET['FROM'])) 
{
    $FROM = $_GET['FROM'];
}
if (isset($_GET['WHERE'])) 
{
    $WHERE = $_GET['WHERE'];
}

所以我认为WHERE语句中的等号会弄乱它。我在这个声明中是否正确?

如果是这样,可能会有什么替代方案?

1 个答案:

答案 0 :(得分:4)

RESTful接口是关于永久链接的资源。在数据库上公开直接查询不会封装您的存储层,也不是RESTful。它是一个透明的RPC机制,通过http来查询你的数据库(直接由消费者)。

在你的例子中:

www.example.com/rest.php?SELECT=this&FROM=that&WHERE='ID'=332

'那'似乎是资源,'this'是它上面的数据,id是对该对象的唯一引用。

所以,为了更加安宁,请考虑:

www.example.com/api/that/{id}

返回的数据包含“列”或属性

{
    attr1:val1,
    attr2:val2
}

您的服务器可以将/ {id}映射到一个获取id的方法,制定必要的sql查询,获取表格数据,填充对象并返回它(序列化为json,xml等等)< / p>

如果你需要进一步过滤,可以考虑使用querystrng params来控制选项(但不是sql where子句)。

www.example.com/api/that/{id}?option=val1&option2=val2