[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부터 비동기 처리를 위한 asyncawait 키워드를 지원합니다. 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 호출 및 병렬 처리를 구현할 때, 메모리 사용량과 네트워크 리소스에 유의해야 합니다. 정확한 예외 처리와 오류 핸들링도 중요합니다.

참고 문헌:

관련 문서: