Класс с одиночным вызовом к API-ресурсу

У меня есть класс, который имеет вызов метода для ресурса API и другие методы, которые используют вывод метода вызова API. Как и сейчас, каждый раз, когда какой-то другой метод вызывает метод api, метод api снова и снова обращается к api. Что было бы лучшим способом сделать один вызов API, а затем использовать вывод через мой класс? Смотрите пример.

class foo {

$param1;
$param2;

function getApi {

return 'call_to_api' . $this->param1 . $this->$param2;
}

function do_stuff_1 {

return 'do_some_other_stuff . '$this->getApi() . $param1
}

function do_stuff_2 {

return 'do_some_other_other_stuff . '$this->getApi() . $param2
}
}

0

Решение

Ты можешь использовать Laravel Cache в ваших запросах к API:

$url = 'http://api.url.com?data1=x&data2=y';

if (Cache::has($url))
{
$apiResult = Cache::get($url);
}
else
{
$apiResult = $this->apiGetResult($url);

Cache::put($url, $apiResult, 5); // cache for 5 minutes
}

return $apiResult;

Таким образом, ваш API будет работать только в том случае, если он никогда не использовался ранее или если срок действия кэша истек Хорошая особенность использования кэша Laravel заключается в том, что он работает между запросами, поэтому, если вашему приложению нужны те же данные в следующем запросе, оно больше не попадет в API.

1

Другие решения

Вы можете создать своего рода кеш, снова вызывая API, только если параметры были изменены:

  class foo {

$param1;
$param2;
private $resultAPI = '';
private $paramModified = false;

function getApi {
if ($this->resultAPI == '' || $this->paramModified) {
$this->resultAPI = 'call_to_api' . $this->param1 . $this->$param2;
$this->paramModified = false;
}
return $this->resultAPI;
}

function setParamX($val) {
if ($this->paramX != $val) {
$this->paramX = $val;
$this->paramModified = true;
}
}

function do_stuff_1 {

return 'do_some_other_stuff . '$this->resultAPI . $param1
}

function do_stuff_2 {

return 'do_some_other_other_stuff . '$this->resultAPI . $param2
}
}
0