我從頭開始構建PHP應用程序(使用Kohana3框架)。我要構建它,以便我可以使用API在內部訪問數據。同時,我想最終提供給公衆。我需要一個API。我應該從哪裏開始?
我打算使用RESTful訪問方法。但是,我很難找到有關如何正確保護API的明確信息。換句話說,我如何實現API簽名和訪問?
我從頭開始構建PHP應用程序(使用Kohana3框架)。我要構建它,以便我可以使用API在內部訪問數據。同時,我想最終提供給公衆。我需要一個API。我應該從哪裏開始?
我打算使用RESTful訪問方法。但是,我很難找到有關如何正確保護API的明確信息。換句話說,我如何實現API簽名和訪問?
你可以嘗試frapi。它將很快允許您構建RESTful API,然後您可以將它用於您的應用程序,並在以後公開公開相同的API。
我認爲一個很好的起點是閱讀關於數字簽名的一般信息。維基百科是一個很好的資源http://en.wikipedia.org/wiki/Public_Key_Infrastructure或http://en.wikipedia.org/wiki/X.509。
在基本水平上,我會給每個客戶一個私鑰。在客戶端庫中,我會加密密鑰。當客戶發出請求時,請確認密鑰是您發給該特定客戶的密鑰。
我一直在使用的CodeIgniter使用基本身份驗證,(提供「公司ID」和「API密鑰」作爲用戶名/密碼)做了一個PHP REST API。後來我們發現有必要配置與API密鑰直接相關的會話密鑰,只需要一個到期時間。
基本上,我們在我們的數據存儲(NoSQL的各種查詢不同類型的數據:)這取決於什麼「法」在URL中提供。我們通過使用CodeIgniter提供的「段」功能來訪問它。
然後我們包裹被退回,一個「json_encode」每個響應,我們也可用於安全的HTTPS連接。
對於客戶端類,我們將所有內容都包裝在$ client-> get_my_data($ api_key)等調用中,下面的圖層使用PHP Libcurl,它非常適合提供基本身份驗證。
希望這有助於
CURL_GET
private function curl_get($url, $apikey, $co)
{
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl_handle, CURLOPT_USERPWD, $co.":".$apikey);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_DNS_USE_GLOBAL_CACHE, FALSE);
$buffer = curl_exec($curl_handle);
$error = curl_error($curl_handle);
curl_close($curl_handle);
// check for success or failure
if (empty($buffer)) {
//echo 'Something went wrong :(error: '.$error.'<Br>';
} else {
return $buffer;
}
}
按客戶類別,您的意思是客戶使用RESTful URL進行交談的主界面?像客戶端[控制器],get_name [方法]與URL,如:site.com/api/client/123?apikey=12345其中觸發$ client-> get_name('123',apikey)? – Andres
多數民衆贊成在多數民衆贊成在正確的,所以然後客戶端可以包括類,並有權訪問它在一個PHP文件,我會更新我的答案與CURL示例「獲取」功能。 –
你提的問題比這大一點;但我可以提供一個關於REST的小小觀察。
我與REST發現,那就是它最好使用人工鍵底層的數據模型,而不是自然鍵。
例如,考慮問題的REST網址:https://server/yourApp/viewUser/1234.html
這將顯示ID爲1234的用戶。然而,如果你使用的自然鍵,你可能有一個URL像這樣https://server/yourApp/viewUser/Bob.html
或者如果不是鮑勃其「鮑勃X」,甚至更糟「鮑勃?鍵=值」。您不必考慮生成無效的URL。
OAuth將是一個不錯的選擇。單個鍵/值對也是如此。你可能也想看看Mashape,但並不完全確定它適合你想要做的事情。
看看3比例(http://www.3scale.net/)來做到這一點 - 它處理認證,訪問控制,策略,速率限制等,並且是免費的,顯著的流量。我們有一個PHP模塊插件到系統來啓用這些功能。 (免責聲明 - 我在那裏工作 - 但希望它有用!)
Wrap frapi看起來很漂亮,雖然他們的網站比看起來更加斯巴達一旦你開始點擊。 – Justin