【发布时间】:2011-11-10 19:04:04
【问题描述】:
99% 的 REST API 的作用是充当客户端和数据库之间的受控接口,但我终其一生都找不到任何可以做到这一点的库。
所有库都专注于为开发人员提供 REST 接口,然后开发人员设置与数据库的通信。创建一个已经与数据库接口的库对我来说似乎很容易,开发人员需要做的就是定义一些 ACL 规则并在这里或那里插入一些逻辑。
所以,在我继续并通过实际创建此类库将我的想法付诸行动之前,我可以问问任何对此主题有知识的人吗?有没有人实施过这样的事情?我会重新发明轮子吗?
顺便说一句,我严格地说是基于 PHP 的解决方案,我对其他语言没有任何意见,PHP 只是我的一杯茶。但就此而言,我也没有找到任何其他语言的实现。
如果我的解释不是很清楚,这基本上就是我想要的:
<?php
class post_controller extends controller {
protected static $config = array(
'select' => true,
'insert' => true,
'update' => true,
'delete' => false,
'fields' => array(
'id' => array(
'select' => true,
'update' => false
),
'name' => array(
'select' => true,
'update' => true
),
'content' => array(
'select' => true,
'update' => true
)
)
);
/**
* GET, POST, DELETE are implemented already by the parent controller
* Just overriding PUT to modify the content entry
*/
function put($data) {
$data->content = htmlentities($data);
return parent::put($data);
}
}
?>
如果这不是适当的 Stackoverflow 问题,请提前感谢任何提供意见和道歉的人。
编辑:
为了澄清,这种类型的服务将用于特定的用例,我不认为它是一种任何人都可以用于任何类型的网络服务的东西。
【问题讨论】:
-
当您指定 acls 和“一点点逻辑”时,您基本上已经构建了一个框架,并且不需要这个神话般的 rest-in-a-box 系统。查看 amfphp 了解 Flash 远程处理“rest”api 的外观。这并不像您想要的那么容易。
-
Flash 远程处理?我根本不是在谈论 AMF。我自己构建了许多 REST(和 AMF)接口,并且非常清楚它并没有尽可能快。我担心你可能会误解我的建议/问题。
-
如果您正在寻找一种无状态、统一的数据库接口,我什么时候可以推荐 SQL。它旨在做到这一点。 REST 并不打算通过网络公开数据库,这就是为什么有经验的 REST 开发人员没有构建一个框架来做这样的事情。
-
REST 只是一个协议,我的建议不是特定于协议的。在这种情况下,MySQL 也是如此。我建议的是一个可配置的 Web 服务,它与数据库交互,并允许您将 ACL 和插件设置为自动化方法以扩展默认行为。这意味着您在创建 Web 服务时一遍又一遍地完成的大部分工作已经为您完成了。如果这对您没有吸引力,那很好,但作为一名经验丰富的 REST 开发人员,我非常不同意您关于为什么似乎还不存在这样的解决方案的推理。
-
这不是一个好主意 IMO。通过 REST 公开您的数据库模式只是一场安全噩梦,即使 REST 本身经过验证,它也可以为站点上其他地方的漏洞提供有用的信息。问问自己为什么要通过 REST 公开数据库?是因为你真的认为它是个好主意,还是因为你想避免编写中间件层的麻烦?
标签: php mysql database web-services rest