【问题标题】:Rest Interface for MySQL DB with ACL带有 ACL 的 MySQL 数据库的 Rest 接口
【发布时间】: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


【解决方案1】:

我已经为 SOAP 构建了一个类似的系统,并且必须说这样做非常容易。我还没有看到任何可以帮助您做到这一点的预建库(我怀疑它们是否存在 - 请参阅下一段),但构建自己的解决方案应该不会花费您超过几个小时(最多一天 - 进行测试)和文档写作)。

但是,如果您真的想这样做,那就完全是另一个问题了。 REST 可以(错误地)用于此目的,但它是用于操纵资源的。数据库中的记录很少与资源具有一对一的映射关系。如果他们在您的情况下这样做(就像他们在我的情况下所做的那样),那么请随意这样做,否则提供适当的 REST API 会更好。为什么要向世界公开您的内部数据库结构?当然是 YMMV。

【讨论】:

  • REST 只是一种风格,它不会是一个完整的 RESTful 实现。您是否从您的 SOAP 实现中学到了其他人应该注意的任何东西?谢谢!
  • 嗯,是的 - 构建它是个坏主意。 ;) 如果我每次都构建一个自定义解决方案,API 会更好,而且做起来也更容易。 :)
猜你喜欢
  • 2012-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 2018-04-04
  • 2018-04-20
  • 2021-07-07
相关资源
最近更新 更多