У меня есть класс, который имеет вызов метода для ресурса 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
}
}
Ты можешь использовать 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.
Вы можете создать своего рода кеш, снова вызывая 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
}
}