원문: 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-type
은 application/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);
});
잡-설
잘 모르는 영어와 개발 코드를 보니 복잡하네요..
새로운 패키지가 들어오는건 좋지만 아직도 배울게 한참많은데
배워야 될것들이 계속 늘어나는걸 보면,, ㅜㅜ