[Laravel 7] Zttp

원문: laravel-news

Zttp is coming to Laravel 7

Adam Wathan가 만든 Zttp(Guzzle wapper) 패키지는 Laravel 7에서 새로운 Http 패키지로 선보여 집니다.

이 기능을 추가하기위한 pull request를 보면 Guzzle를 사용할 때보다 약 90%정도 더 좋은 구문을 제공합니다.

새로운 Http에 기본적인 사용 방법에 대한 예시입니다.

use Illuminate\Support\Facades\Http;

$response = Http::post('url', [
    'name' => 'Taylor',
]);

echo $response['foo'];

$response->body()
$response->json()
$response->status()
$response->ok()
$response->successful() (>= 200 && < 300)
$response->serverError()
$response->clientError()

Taylor의 PR내용을 보면, 이 패키지는 완전 새로운 클라이언트가 아닌 Guzzle 윗 레이어에서 UX/DX를 좀더 펼리하게 해주는 역할을 한다고 합니다.

이 패키지는 복잡하고 많은 내용이 추가되는것이 아닙니다. 그리고 만약 더 많은 것들이 필요하다면 Guzzle를 직접 사용할 수 있습니다.

새로운 HTTP 패키지에 대한 내용을 알고 싶으면 pull request를 확인해보세요.


새로운 Http 패키지 분석 (?)

Taylor의 PR를 보면 “Guzzle의 모든 기능을 이 API를 통해 제공하려는게 아니다.”라고 적혀있는걸 보면 말 그대로 TEST나 간단한 Http request정도만 지원하고 나머지는 Guzzle를 직접 적으로 사용하라는것같다.

더 많은 예시

새로운 Http 패키지의 기본적인 content-typeapplication/json이라고 한다.
하지만 아래와 같은 코드로 쉽게 form-urlencoded요청을 보낼 수 있다.

$response = Http::asForm()->post('url', [
    'name' => 'Taylor',
]);

그리고 multi-part타입으로 파일을 보낼 수도 있다.

$response = Http::attach('name', 'stream/contents', 'filename.txt')->post('url');

해더 / 인증정보 (Authentication)

해더는 withHeaders 메소드로 보낼 수 있다.

$response = Http::withHeaders(['X-Foo' => 'bar'])->post('url', [
    'name' => 'Taylor',
]);

인증 / bearer 과 같은 토큰 정보는 withToken메소드로 보낼 수 있다.

$response = Http::withToken('token')->post('url', [
    'name' => 'Taylor',
]);

Basic Authenication은 withBasicAuth메소드로 보낼 수 있다.

$response = Http::withBasicAuth('username', 'password')->post('url', [
    'name' => 'Taylor',
]);

에러

ZTTP와 같이 기본적으로 서버, 클라이언트 에러를 출력하지 않는다고 한다.
하지만 만약 HTTP응답이 실패했을때 $response->throw()를 통해 예외 처리를 할 수 있다.

$response = Http::post(...);

if (! $response->successful()) {
    $response->throw();
}

Testing / Faking

Http::fake()를 지원하며, 기본적으로 비여있는 200응답을 한다.

Http::fake();

$response = Http::post('url');

Http::fake()는 인자로 Array를 받으며, 패턴이 일치하는 경우는 Http::response를 통해 응답을 만들어 낼 수 있으며, 만약 일치되는 패턴이 없다면, 실제로 실행된다.

Http::fake([
    'github.com/*' => Http::response([1, 2, 3], 200, ['Headers']),
]);

만약 모든 패턴에 대해서 실행되는것을 막고 싶다면 아래와 같이 작성할 수 있다.

Http::fake([
    'github.com/*' => Http::response([1, 2, 3], 200, ['Headers']),
    '*' => Http::response('', 200),
]);

연속적인 응답은 Http::sequentce를 이용해 지정된 순서에 맞게 응답이 출력된다.

Http::fake([
    '*' => Http::sequence([Http::response('foo', 200), Http::response('bar', 200)]),
]);

마지막으로 Http::fake()는 클로저를 지원한다.

Http::fake(function ($request) {
    return Http::response('foo', 200);
});

잡-설

잘 모르는 영어와 개발 코드를 보니 복잡하네요..
새로운 패키지가 들어오는건 좋지만 아직도 배울게 한참많은데
배워야 될것들이 계속 늘어나는걸 보면,, ㅜㅜ

글의 문제가 있다면 댓글을 달아 주세요.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.