切入追逐:我的應用程序將使用cURL調用一個API。然而,這個API需要保密,所以我使用框架來創建我自己的API來查詢外部API。我已經這樣做了,但它確實很麻煩,而且是不好的編碼 - 所以我想盡我所能做好這件事,爲了我自己的學習。瞭解面向對象的編程 - 我可以改進什麼?
我第一次創建我interface
:
interface APICall {
/**
* Return data from the API
* @returns json
*/
public function callData($method, $parameters);
}
我然後創建我的類,它會做捲曲(將只是做一個GET請求現在):
class curl {
private static $apiUrl = 'http://api.somewebsite.com/v1/';
public function __construct() {
if (!function_exists('curl_init'))
exit('CURL is not installed!');
}
public function getCurl($method, $parameters) {
$url = self::$apiUrl . $method . '?' . $parameters;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
// Another function for a POST request could go here
}
好了,現在我會爲每個特定呼叫創建我的課程,例如「獲取用戶列表」:
class users extends curl implements APICall {
/**
* Get list of users
*/
public function callData($method, $parameters) {
$this->getCurl($method, $parameters);
}
}
好了 - 現在我不能完全肯定這將工作(集思廣益現在),但我知道我還會有一些問題:
在我的捲曲類
__construct
,我不認爲這不應該包含一個「檢查是否安裝了cURL」的檢查 - 但是最佳去哪裏?我在curl類的每個方法中構建了
$url
--這看起來很糟糕,因爲我最終會重複這個 - 但是我在哪裏創建了要使用的?我感覺好像在用
$method
&$parameters
很頻繁,這是正常的嗎?
很抱歉,如果這是相當多的,只是想了解它作爲我當前編碼的做法都是扯淡!
如果使用cURL,它肯定會確保它需要的東西存在。至少,定義類的文件應該檢查。儘管如此,它不應該「退出」。它可能應該拋出異常。 – cHao
順便說一句,考慮到這是一個改進工作代碼的請求,它可能會更適合[codereview.se]。這裏的問題通常預計會涉及不起作用的東西。 – cHao
此外,PHP已經有一個內置的方法來執行'$ method'和'$ parameters'。如果您的'callData'函數重命名爲'__call',調用者甚至不必知道該方法是動態的;它可以說'$ obj-> someMethod($ params)'。這使得構建代表底層API的代理對象變得非常容易,而不會讓調用者變得醜陋。 – cHao