#php #api #nested
#php #API #вложенные
Вопрос:
Я вызываю конечную точку API, чтобы получить список доменов:
/v2/domains
В рамках этого результата мне нужно сделать еще один вызов, чтобы получить сведения о доменах:
/v2/domains/{domainName}
В настоящее время это происходит внутри foreach
цикла, что делает процесс трудоемким и дорогостоящим.
Упрощенный пример:
$domainobj = $client->get('/v2/domains/');
$domains = json_decode($domainobj->getBody()->getContents());
foreach ($domains as $domain) {
$domaindetailobj = $client->get('/v2/domains/' . $domain->domain_name);
$domaindetail = json_decode($domaindetailobj->getBody()->getContents());
// Send mail to registrant
}
}
Полный рабочий пример:
// Connect to API
$client = new Client(
[
'debug' => false,
'base_uri' => 'https://api.combell.com',
'combell_api_key' => 'XXXXX',
'combell_api_secret' => 'XXXXX'
]
);
// Get domains from API
$domainsobj = $client->get('/v2/domains/');
$domains = json_decode($domainsobj->getBody()->getContents());
// Get domains that need to be renewed
foreach ($domains as $domain) {
// Get expiration date of each domain
$expirationdate = new DateTime($domain->expiration_date);
// Calculate Send date (= 31 days prior to expiration)
$senddate = $expirationdate->sub(new DateInterval("P31D"));
$senddate = $senddate->format("Y-m-d");
// Set the current date
$currentdate = new DateTime("now");
$currentdate = $currentdate->format("Y-m-d");
// Send mail to registrant
if ($senddate == $currentdate) {
// Get expiring domains from API
$expiringdomainobj = $client->get('/v2/domains/' . $domain->domain_name);
$expiringdomain = json_decode($expiringdomainobj->getBody()->getContents());
$date = new DateTime($expiringdomain->expiration_date);
$date = $date->format("Y-m-d");
$domain = $expiringdomain->domain_name;
$mail = $expiringdomain->registrant->email;
SendMail ($date, $mail, $domain);
}
}
Пожалуйста, обратите внимание:
- Я не имею никакого отношения к API, поэтому я не могу его изменить
- Эти конечные точки не принимают несколько параметров
Должен быть лучший способ справиться с этим. Может кто-нибудь указать мне правильное направление.
Комментарии:
1. Рабочие решения, требующие рефакторинга, могут лучше подойти для проверки кода .
2. @El_Vanja Я добавил полный рабочий пример в поддержку вашего комментария.
3. Мой комментарий состоял в том, чтобы указать потенциально лучший сайт для вопроса. Как вы прочитали это как «добавить полный рабочий пример»?
4. Неважно, но я это сделал. Не слышал о Code Review, все это в новинку. Посмотрим там. Спасибо.