2012-09-30 37 views
3

我想从数据库中自动生成Web API。我可以很容易地用SQL查询数据库,但显然这不适用于公共API。我也可以手动编写服务器端代码,但这需要很长时间,因为数据库相当大。另外,手动编写它会是一个非常机械和重复的任务,所以我不明白为什么一个程序不能为我做。如何从数据库“生成”Web API?

例如,假设我在我的数据库中有一个名为“Announcements”的表格。我正在寻找一种方法(给定该数据库表),自动生成服务器端代码,以允许某人创建新通告,并需要正确的字段。手动完成,这看起来像一个名为“create_announcement.php”的PHP文件,它需要数据库中存在的所有字段,例如公告标题,正文和作者。当然,这也可以通过遵循一些设计模型(比如REST)以更清晰的方式完成,但这仅仅是一个例子。

我正在考虑其他的事情是:

  • 认证的某种形式。例如,如果用户想要删除公告,他/她应该被要求“登录”来这样做。我不确定这是如何工作的。
  • 添加逻辑的一些方法。如果我可以生成一个通过HTTP访问数据库的API(正如我上面所描述的那样),API将不会意识到某些特定性。假设公告资源应在今日之后包含日期必须是。我需要一种方法在代码中表达。
  • 如果解决方案可以遵循一些设计模型,以便更容易地从不同的客户端访问,那将是理想的选择。

那么我应该看什么样的工具?人们在面对这个问题时采取的一般方法是什么?

+0

听起来像[Doctrine](http://www.doctrine-project.org/)或[Yii](http://yiiframework.com)。 –

+0

我看过Yii。问题在于它也似乎也想为你做客户端的东西。我希望手动创建一个单独的AJAX应用程序。但我会阅读关于教义。 – Hassan

+0

这些ORM /制图系统中的大多数将会变得沉重。这是主要的投诉之一。 –

回答

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过程很有趣(在本视频中演示)(http://www.symfony-project.org/screencast/admin-generator)。 –