HTTP 클라이언트란
Laravel의 HTTP 클라이언트는 Guzzle을 래핑한 사용하기 쉬운 API입니다.Http 파사드를 통해 외부의 웹 서비스나 API에의 HTTP 요청을 간결하게 기술할 수 있습니다.
Guzzle은 사전 설치되어 있기 때문에 추가 설정 없이 바로 사용하기 시작할 수 있습니다.
기본적인 요청
GET 요청
POST 요청
데이터는 기본적으로application/json으로 전송됩니다.
PUT / PATCH / DELETE
응답의 처리
Http::get() 등의 메서드는 Illuminate\Http\Client\Response 인스턴스를 반환합니다.
이 객체에는 응답을 검사하기 위한 다수의 메서드가 준비되어 있습니다.
요청 옵션
헤더의 설정
application/json을 받아들일 것을 나타내는 경우 acceptJson()이 편리합니다.
브라우저에서 Laravel로 보내는 AJAX 요청의 CSRF 헤더(
X-CSRF-TOKEN / X-XSRF-TOKEN)에 대해서는 CSRF 보호를 참조해 주십시오.인증
Bearer 토큰 인증(가장 일반적):베이스 URL 의 설정
같은 호스트로의 요청이 많은 경우baseUrl()로 정리할 수 있습니다.
폼 데이터의 전송
application/x-www-form-urlencoded로 전송하고 싶은 경우 asForm()을 사용합니다.
타임아웃
리트라이
일시적인 네트워크 장애나 서버 에러에 대해 자동 리트라이를 설정할 수 있습니다.에러 핸들링
수동으로 에러를 확인
Laravel의 HTTP 클라이언트는 기본적으로는 400·500번대의 응답에 대해 예외를 스로우하지 않습니다.failed()나 clientError() 등으로 명시적으로 확인합니다.
예외를 스로우
throw()를 사용하면 에러 시에 Illuminate\Http\Client\RequestException을 스로우합니다.
throw()는 응답 인스턴스를 반환하기 때문에 메서드 체인으로 쓸 수 있습니다.
병행 요청
여러 API를 동시에 호출하고 싶은 경우,pool()로 병행 실행할 수 있습니다.
테스트
Http::fake() 에 의한 목
테스트에서는Http::fake()를 사용해 실제 HTTP 요청을 보내지 않고 응답을 시뮬레이트합니다.
요청의 검증
Http::assertSent()로 요청의 내용을 검증할 수 있습니다.
Stray 요청의 방지
실전 예시: 외부 API 를 호출하는 서비스 클래스
실제 프로젝트에서는 HTTP 클라이언트의 로직을 서비스 클래스에 정리하는 것이 모범 사례입니다.1
서비스 클래스 작성
2
서비스 프로바이더에서 등록
3
컨트롤러에서 이용
4
테스트 작성
정리
자주 사용하는 메서드 목록
자주 사용하는 메서드 목록
외부 API 연계의 모범 사례
외부 API 연계의 모범 사례
- HTTP 클라이언트의 로직은 서비스 클래스에 정리
- 반드시 타임아웃을 설정(
timeout()과connectTimeout()) - 일시적인 장애에 대해 리트라이를 설정(
retry()) - 테스트에서는
Http::fake()를 반드시 사용해 외부 API를 실제로 두드리지 않음 Http::preventStrayRequests()를 테스트의 셋업에 추가하면 안심- API 의 토큰이나 인증 정보는 환경 변수와
config/services.php로 관리