Вложенные вызовы API в PHP

#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, все это в новинку. Посмотрим там. Спасибо.