Я пытаюсь научиться создавать обертки php для сторонних apis.Однако я запутался в реализации нескольких классов, расширенных / реализованных друг в друге.
class Api {
protected $username;
protected $password;
protected $wsdl = "http://example.com"
protected $client;
protected $account;
public function __construct($username, $password)
{
$this->client = new SoapClient($this->wsdl);
$authData = [
"Credentials" => [
"Username" => $username,
"Password" => $password
]
];
$this->makeCall('AuthenticateUser', $authData);
$this->account = $this->makeCall('GetAccountInfo', ["Authenticator" => $this->authenticator]);
}
protected function makeCall($method, $data) {
$result = $this->client->$method($data);
$this->authenticator = $result->Authenticator;
return $result;
}
}
Пока здесь это не имеет смысла.Однако на данный момент я не хочу добавлять все методы в этом классе.Таким образом, я решил создать отдельный класс для каждого метода.И вот, здесь начинается проблема.
class AddressValidator extends Api
{
public function validateAddress($data) {
$response = $this->makeCall('validateAddress', $data);
dd($response);
}
}
Логически, как мне нужно вызвать оболочку (в моем контроллере), как это показано ниже, верно?
$api = new Api($username, $password);
$api->validateAddress($params); // but I can't call this line with this setup
Вместо этого это работает:
$api = new ValidateAddress($username, $password);
$api->validateAddress($params);
Имеет смысл, но разве это хороший способ его организации?
Какой прекрасный способ настройкиAPI-оболочка?Кстати, может быть, я не прав с таким подходом полностью.Я был бы рад услышать, что вы думаете