Particularmente, gerenciaria isso com uma interface:
interface ExternalInfoInterface
{
public function call(): void;
public function response(): array;
}
readonly class ApiX implements ExternalInfoInterface
{
private $response;
public function call(): void
{
$this->response = Http::get('link');
// não esqueça de tratar os erros
}
public function response(): array
{
return $this->response;
}
}
readonly class ApiY implements ExternalInfoInterface
{
//mesma coisa
}
readonly class ApiA implements ExternalInfoInterface
{
//mesma coisa
}
No exemplo eu separei a call()
da response()
por puro costume de separar bem separado as responsabilidade dos métodos, faça como achar melhor para você. Gosto assim.
Prefiro trabalhar orientado a interfaces ao invez de herança (explicação melhor aqui).