2013-05-15 95 views
-1

我有一個簡單的PHP API。我只是使用cURL作爲客戶端,而$_POST接受服務器端的請求。喜歡的東西..PHP API保護?

客戶:

<?php 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/api-server"); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array('q' => 'world!')); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); 
$response = curl_exec($ch); 
curl_close($ch); 

echo json_decode($response); 
?> 

服務器:

<?php 
echo json_encode("hello, ".$_POST["q"]); 
?> 

我的問題,這裏有:

  • 難道我甚至還在反正以下的標準API邏輯?
  • 如何「保護」此API服務器訪問?
+0

「如何」保護「此API服務器訪問?」 ---像其他任何HTTP頁面一樣。虛擬方式:http basic auth。先進的方式:OAuth – zerkms

+0

LoL,似乎是如此明確的答案。你介意說這是什麼?我問Bcos這些事情。 –

+1

你爲什麼不想谷歌呢?我給了你幾個關鍵字 – zerkms

回答

0

好,我在這裏找到了我上面問: http://php.net/manual/en/features.http-auth.php

它簡單地使用,API頁面:

if ($_SERVER['PHP_AUTH_USER'] == $MY_API_USER && $_SERVER['PHP_AUTH_PW'] == $MY_API_PW) { 
    .. 
    .. 
} else { 
    header('WWW-Authenticate: Basic realm="Sorry, this API is protected. You may need a valid authentication."'); 
    header('HTTP/1.0 401 Unauthorized'); 
    exit; 
} 

在來電/請求者結束,加上這兩條線到cURL電話:

.. 
curl_setopt($ch, CURLOPT_USERPWD, $MY_API_USER.":".$MY_API_PWD); 
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
.. 

這就是所有,對我來說。

1

不要試試&寫一個API引擎,這些都是行業標準。看看肥皂或REST。

下面是一些圖書館在那裏的,會做所有繁重:

那麼,保護這些,你可以使用基本的HTTP保護,通過OAuth的等

+0

你也可以用SoapUI獨立地測試你的API服務器http://www.soapui.org(免費下載) –

+0

公平地說,創建一個RESTful API實現沒有任何內在的錯誤,特別是它提供的目的是爲了比大多數通用實現更窄的目的,或者組件可以在沒有太多問題的情況下進行管理。但是,不要重新發明輪子;儘可能使用經過良好測試的組件。 – Dan

0

雖然有明確定義的通信協議,如HTTP,和傳輸格式,如JSON,一個API架構的實際執行情況留給開發者。

許多現有的工具,從完整的框架到模塊化組件,都有助於構建API層,但在一天結束時,您需要構建一些可行的工具。

如果您需要服務器,請專注於服務器,並將重點放在遵循標準(如果可用)和其他最佳實踐的實現上;包括資源架構,認證等方面。

現在,你正在噴出一些連接JSON的查詢參數。我懷疑這是預期的最終結果,除非你是在服務器之後的echo

在服務或域模型之後爲您的API建模;將方法和屬性作爲API層的資源公開。

附錄:哦,和「保護」;已經提到的HTTP Basic或OAuth技術是很好的選擇,但是我的答案的核心是:它取決於你需要什麼。