我想从数据库自动生成一个网络 API。我可以使用 SQL 轻松查询数据库,但显然这不适用于公共(public) API。我也可以手动编写服务器端代码,但这会花费很长时间,因为数据库相当大。此外,手动编写它是一项非常机械和重复的任务,所以我不明白为什么程序不能为我完成。
例如,假设我的数据库中有一个名为“Announcements”的表。我正在寻找一种方法(给定数据库表),自动生成服务器端代码,允许某人创建新公告,需要正确的字段。手动完成,这可能看起来像一个名为“create_announcement.php”的 PHP 文件,它需要数据库中存在的所有字段,如公告标题、正文和作者。当然,这也可以通过遵循一些设计模型(如 REST)以更简洁的方式完成,但这只是一个例子。
我正在考虑的其他事情是:
- 某种形式的身份验证。例如,如果用户想删除一个公告,他/她应该被要求“登录”才能这样做。我不确定这是如何运作的。
- 一些添加逻辑的方法。如果我可以生成一个 API 来通过 HTTP 访问数据库(正如我在上面尝试描述的那样),那么该 API 将不会意识到某些特殊性。假设公告资源应该包括一个必须在今天之后的日期。我需要一种在代码中表达这一点的方法。
- 如果解决方案可以遵循某种设计模型以使其更容易从不同的客户端访问,那将是理想的。
那么我应该研究什么样的工具呢?人们在遇到这个问题时通常采取什么方法?
最佳答案
上面的评论列出了一些很棒的现有软件,您真的需要弄清楚是否要重新发明这个概念。
如果您自己编写此代码,与单独编写每个页面和操作相比,您仍然可以节省很多时间,但是如果您还没有验证,那么您所说的验证可能会占用您所有的时间这些模型中内置的功能(如果存在)。
一些简单的东西可以从 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);
?>
你绝对可以在几个小时内取得一些重大进展,添加字段以专门显示或隐藏,你甚至可以在简单的基础上处理验证(必填字段很简单)现在只是让它滚动.
关于php - 如何从数据库中获取 "generate"Web API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658612/