2012-09-30 36 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)。 –