如何从数据库中“生成”Web API?

3
我希望能够从数据库自动生成Web API。我可以轻松使用SQL查询数据库,但显然这对于公共API来说不够好。我也可以手动编写服务器端代码,但由于数据库相当大,这将需要很长时间。此外,手动编写会是一项非常机械和重复的任务,因此我认为程序可以替代我完成它。
例如,假设我的数据库中有一个名为“Announcements”的表。我正在寻找一种方法(给定该数据库表)自动生成允许他人创建新公告的服务器端代码,并要求正确的字段。如果手动完成,这可能看起来像一个名为“create_announcement.php”的PHP文件,其中包含数据库中存在的所有字段,如公告标题、正文和作者。当然,这也可以通过遵循某些设计模型(如REST)以更清晰的方式完成,但这只是作为示例。
我考虑的其他事情包括:
- 某种形式的身份验证。例如,如果用户想要删除公告,则应要求其进行“登录”。我不确定这在这里如何实现。 - 添加逻辑的某种方式。如果我可以生成通过HTTP访问数据库的API(如我上面所描述的),则API将不会意识到某些特定性。假设公告资源应包括必须在今天之后的日期。我需要一种在代码中表达它的方法。 - 如果解决方案能够遵循某些设计模型,以便更容易从不同的客户端访问,那将是理想的。
那么我应该查找哪些工具?当面临这个问题时,人们通常采取什么样的一般方法?

听起来像是 Doctrine 或者 Yii - Jared Farrish
大多数ORM/映射系统都会很重,这是主要的抱怨之一。 - Jared Farrish
该插件允许生成与Doctrine模型绑定的REST模块。它可以轻松创建REST Web服务,并提供可扩展的数据交换框架。 - [sfDoctrineRestGeneratorPlugin](http://www.symfony-project.org/plugins/sfDoctrineRestGeneratorPlugin) - Jared Farrish
你一定要看看SlashDB,从数据库到API没有比这更简单的方式了。http://www.slashdb.com - Victor Olex
1
也可以尝试一下 https://apisentris.com。 - Ardian
显示剩余4条评论
1个回答

2

以上评论列出了一些很棒的现有软件,你真的需要弄清楚是否想要重新发明这个概念。

如果你自己写,仍然可以节省很多时间,而不是逐个编写每个页面和操作,但如果你没有将这些功能内置到这些模型中,你所说的验证可能会占据你所有的时间,如果它们存在的话。

简单的东西可以接收表名、操作名、URL中的ID号并输出基本内容。

<?
$allowed_tables = array('posts','comments','people');

$table = $_GET['table'];
$page = (int) $_GET['page'];

$per_page = 100;
$offset = ($page - 1) * $per_page;

if (!$table || !in_array($table, $allowed_tables)) {
    die('Invalid table.');
}


$rs = mysql_query("SELECT * FROM `$table` ORDER BY `id` DESC LIMIT $per_page, $offset");
$data = array();

if ($rs && mysql_num_rows($rs)) {
    while ($row = mysql_fetch_array($rs,MYSQL_ASSOC)) {
        $data[] = $row;
    }
}

print json_decode($data);
?>

你一定可以在几个小时内取得一些重大进展,添加字段以特别显示或隐藏,甚至可以基于简单的方式处理验证(现在只需处理必填字段),以便开始运行。


1
新的框架可以为你完成很多工作,而无需构建自己的映射和模型,这真是太神奇了。我发现观看Symfony过程(在此视频中演示)非常有趣。 - Jared Farrish

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接