2011-02-18 59 views
6

我從頭開始構建PHP應用程序(使用Kohana3框架)。我要構建它,以便我可以使用API​​在內部訪問數據。同時,我想最終提供給公衆。我需要一個API。我應該從哪裏開始?

我打算使用RESTful訪問方法。但是,我很難找到有關如何正確保護API的明確信息。換句話說,我如何實現API簽名和訪問?

回答

5

你可以嘗試frapi。它將很快允許您構建RESTful API,然後您可以將它用於您的應用程序,並在以後公開公開相同的API。

+0

Wrap frapi看起來很漂亮,雖然他們的網站比看起來更加斯巴達一旦你開始點擊。 – Justin

1

我認爲一個很好的起點是閱讀關於數字簽名的一般信息。維基百科是一個很好的資源http://en.wikipedia.org/wiki/Public_Key_Infrastructurehttp://en.wikipedia.org/wiki/X.509
在基本水平上,我會給每個客戶一個私鑰。在客戶端庫中,我會加密密鑰。當客戶發出請求時,請確認密鑰是您發給該特定客戶的密鑰。

+1

另一個看它的鏈接是http://www.oauth.net/ – NotMe

+1

是的。這正是我想要了解的。 Oauth對如何在我自己的應用程序中作爲提供者實現的方法感到困惑。我寧願自己做,學習,然後考慮使用他們不斷變化的圖書館。我在基礎知識上遇到了麻煩。你解釋了一些與我所設想的相似的東西。雖然會話和Cookie也會在請求登錄時發揮作用。使用委託登錄也是另外一個問題。 – Andres

0

我一直在使用的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; 
     } 
    } 
+0

按客戶類別,您的意思是客戶使用RESTful URL進行交談的主界面?像客戶端[控制器],get_name [方法]與URL,如:site.com/api/client/123?apikey=12345其中觸發$ client-> get_name('123',apikey)? – Andres

+0

多數民衆贊成在多數民衆贊成在正確的,所以然後客戶端可以包括類,並有權訪問它在一個PHP文件,我會更新我的答案與CURL示例「獲取」功能。 –

0

你提的問題比這大一點;但我可以提供一個關於REST的小小觀察。

我與REST發現,那就是它最好使用人工鍵底層的數據模型,而不是自然鍵。

例如,考慮問題的REST網址:https://server/yourApp/viewUser/1234.html這將顯示ID爲1234的用戶。然而,如果你使用的自然鍵,你可能有一個URL像這樣https://server/yourApp/viewUser/Bob.html或者如果不是鮑勃其「鮑勃X」,甚至更糟「鮑勃?鍵=值」。您不必考慮生成無效的URL。

+0

謝謝,但不是我正在尋找的答案。我正在尋找認證密鑰......有點。 – Andres

+0

我不明白那部分frapi(我沒有看到他們在哪裏定義了什麼「API密鑰」,我根據主題和授權進行了訪問控制,可以使用HTTP BASIC/SSL或SSL相互授權以建立主題ID,以及任何您想要授權的內容。 – Justin

2

OAuth將是一個不錯的選擇。單個鍵/值對也是如此。你可能也想看看Mashape,但並不完全確定它適合你想要做的事情。

1

看看3比例(http://www.3scale.net/)來做到這一點 - 它處理認證,訪問控制,策略,速率限制等,並且是免費的,顯著的流量。我們有一個PHP模塊插件到系統來啓用這些功能。 (免責聲明 - 我在那裏工作 - 但希望它有用!)

相關問題