切入追逐:我的应用程序将使用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