[php] PHP에서 다중 API 호출 및 병렬 처리 방법
PHP로 다중 API 호출 및 병렬 처리를 수행해야 할 때가 있습니다. 예를 들어, 여러 서비스의 API 결과를 모아서 화면에 렌더링해야 하는 경우에는 API 호출이 많아질 수 있습니다. 병렬 처리를 통해 API 호출의 시간을 단축하고 효율적으로 작업을 처리할 수 있습니다.
Guzzle HTTP 클라이언트 라이브러리 사용
Guzzle는 PHP에서 HTTP 요청을 보내는 데 사용되는 강력한 라이브러리입니다. 병렬 HTTP 요청을 보내고 결과를 처리하는 데 매우 적합합니다. 다음은 Guzzle를 사용하여 다중 API를 호출하고 병렬로 처리하는 예제입니다.
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\Promise;
// Guzzle 클라이언트 생성
$client = new Client();
$promises = [
'promise1' => $client->getAsync('https://api.example.com/endpoint1'),
'promise2' => $client->getAsync('https://api.example.com/endpoint2'),
'promise3' => $client->getAsync('https://api.example.com/endpoint3'),
];
$results = Promise\settle($promises)->wait();
foreach ($results as $key => $result) {
// 결과 처리
if ($result['state'] === 'fulfilled') {
$response = $result['value'];
// 처리할 작업 수행
} else {
$exception = $result['reason'];
// 에러 처리
}
}
위 예제에서는 Guzzle의 Client
를 사용하여 3개의 다중 API 요청을 비동기로 보내고 결과를 처리합니다.
비동기 함수를 활용한 병렬 처리
PHP 7.2부터 비동기 처리를 위한 async
및 await
키워드를 지원합니다. async
함수를 사용하여 비동기식으로 여러 API를 호출하고 await
를 사용하여 결과를 기다릴 수 있습니다.
<?php
require 'vendor/autoload.php';
use Amp\Loop;
use Amp\Promise;
use function Amp\async;
use function Amp\await;
// 비동기 함수 정의
$fetchData = async function (string $url) {
$response = yield HttpClient\get($url);
return yield $response->getBody()->buffer();
};
// API 호출
$results = Promise\wait(Promise\all([
$fetchData('https://api.example.com/endpoint1'),
$fetchData('https://api.example.com/endpoint2'),
$fetchData('https://api.example.com/endpoint3'),
]));
// 결과 처리
foreach ($results as $result) {
// 결과 처리 작업
}
위 예제에서는 async
함수를 사용하여 비동기로 API를 호출하고, await
를 사용하여 결과를 기다립니다.
결론
PHP에서 다중 API를 병렬로 처리하는 방법은 Guzzle와 비동기 함수를 활용하는 것이 효율적입니다. 이를 통해 API 호출의 성능을 개선하고 빠른 응답을 제공할 수 있습니다.
이러한 방법을 사용하여 다중 API 호출 및 병렬 처리를 구현할 때, 메모리 사용량과 네트워크 리소스에 유의해야 합니다. 정확한 예외 처리와 오류 핸들링도 중요합니다.
참고 문헌:
관련 문서: