[php] PHP에서 비동기 API 호출

PHP는 기본적으로 동기적으로 작동하지만, 때로는 비동기적인 API 호출이 필요할 수 있습니다. 이 글에서는 PHP에서 비동기 API 호출을 하는 방법에 대해 알아보겠습니다.

cURL을 사용한 비동기 API 호출

cURL은 PHP에서 HTTP 요청을 보내는데 사용되는 기본적인 라이브러리이며, 비동기적인 요청을 보내는 데에도 사용할 수 있습니다. curl_multi_init() 함수를 사용하여 여러 개의 cURL 핸들을 초기화하고, curl_multi_exec() 함수를 사용하여 병렬로 요청을 보낼 수 있습니다.

예제 코드:

<?php
$urls = array(
    'https://api.example.com/endpoint1',
    'https://api.example.com/endpoint2',
    // Add more URLs as needed
);

$mh = curl_multi_init();
$handles = array();

foreach ($urls as $url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $ch);
    $handles[] = $ch;
}

$active = null;
do {
    curl_multi_exec($mh, $active);
} while ($active > 0);

foreach ($handles as $handle) {
    $response = curl_multi_getcontent($handle);
    // 처리할 내용
    curl_multi_remove_handle($mh, $handle);
}

curl_multi_close($mh);
?>

이 예제 코드에서는 cURL을 사용하여 여러 개의 URL에 동시에 HTTP 요청을 보내고, 각각의 응답을 처리하는 과정을 보여줍니다.

Guzzle 라이브러리를 사용한 비동기 API 호출

Guzzle은 PHP용 HTTP 클라이언트 라이브러리로, 비동기 API 호출을 간편하게 수행할 수 있는 기능을 제공합니다. Guzzle의 Pool이나 Promise 등의 기능을 사용하여 비동기적인 HTTP 요청을 처리할 수 있습니다.

예제 코드:

<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;
use GuzzleHttp\Promise;

$client = new Client();

$promises = [
    'request1' => $client->getAsync('https://api.example.com/endpoint1'),
    'request2' => $client->getAsync('https://api.example.com/endpoint2'),
    // Add more async requests as needed
];

$results = Promise\settle($promises)->wait();

foreach ($results as $key => $result) {
    // 처리할 내용
}
?>

위의 예제 코드에서는 Guzzle를 사용하여 비동기적으로 HTTP 요청을 보내고, 응답을 처리하는 방법을 보여줍니다. Client를 생성하고 getAsync 함수를 사용하여 비동기적인 요청을 보낸 후, Promise\settlewait 함수를 통해 응답을 처리합니다.

이렇게 PHP에서 비동기 API 호출을 위해 cURL이나 Guzzle 같은 라이브러리를 활용할 수 있습니다.