웹훅 - 파트 II
11399 단어 integrationwebhook
우리는 Laravel과 Spatie의 패키지Laravel Webhook Server를 사용하여 빌드할 것입니다.
새로운 라라벨 프로젝트 생성
새로운 라라벨 프로젝트를 생성해봅시다:
laravel new webhook-client --git --jet --stack=livewire
php artisan queue:table
php artisan migrate
패키지 설치 및 구성
패키지를 설치합니다.
composer require spatie/laravel-webhook-server
php artisan vendor:publish --provider="Spatie\WebhookServer\WebhookServerServiceProvider"
기본적으로 Spatie는
config/webhook-server.php
에서와 같이 Webhook을 이미 사전 구성했습니다.<?php
return [
'queue' => 'default',
'connection' => null,
'http_verb' => 'post',
'signer' => \Spatie\WebhookServer\Signer\DefaultSigner::class,
'signature_header_name' => 'Signature',
'headers' => [
'Content-Type' => 'application/json',
],
'timeout_in_seconds' => 3,
'tries' => 3,
'backoff_strategy' => \Spatie\WebhookServer\BackoffStrategy\ExponentialBackoffStrategy::class,
'verify_ssl' => env('WEBHOOK_VERIFY_SSL', false),
'throw_exception_on_failure' => false,
'tags' => [],
];
개발에 관해서는
verify_ssl
끄고 싶습니다. 다음과 같이 설정하여 구성할 수 있습니다.'verify_ssl` = env('WEBHOOK_VERIFY_SSL', false),
따라서 기본적으로 SSL이 선택 사항인지 확인합니다. 프로덕션 환경에서 활성화하도록 권장하지 않는 한 말입니다.
관심을 가질 수 있는 또 다른 구성은 헤더를 설정하는 것입니다. 이를 통해 페이로드가 사용자로부터 오는 일종의 식별자를 가질 수 있습니다. 다음을 추가하는 것이 좋습니다.
'headers' => [
'Content-Type' => 'application/json',
'X-App' => env('APP_NAME'),
'X-Version' => 1.0
],
다음으로 데이터베이스 큐를 사용하여
.env
를 업데이트합니다.QUEUE_CONNECTION=database
구문
이제 재미있는 부분은 페이로드를 보내는 것입니다. 페이로드를 보내는 것은 문서에 따라 간단한 설정입니다.
WebhookCall::create()
->url('https://other-app.com/webhooks')
->payload(['key' => 'value'])
->useSecret('sign-using-this-secret')
->dispatch();
여기에서 볼 수 있듯이 몇 줄의 코드에 불과합니다. 그것을 조금 설명합시다.
url()
메서드는 Webhook Provider로부터 데이터/정보/페이로드를 수신하는 Webhook Consumer 엔드포인트를 제공해야 합니다.payload()
는 Webhook 소비자와 공유하려는 모든 정보인 데이터 배열을 허용합니다.useSecret()
는 Webhook 소비자가 공유할 비밀 키입니다. 따라서 웹후크 소비자가 페이로드를 수신하면 웹후크 공급자가 보낸 서명을 확인합니다.dispatch()
는 기본적으로 Webhook 소비자에게 정보를 보내기 위해 대기열 작업에 페이로드를 보냅니다. 기본적으로 패키지는 기본 대기열을 사용합니다. config/webhook-server.php
에서 이를 구성할 수 있습니다.페이로드 보내기
이 게시물에서는 Webhook Provider에서 새로 생성된 사용자를 알아야 하는 Webhook 소비자에게 보내겠습니다.
간단하게
app/Models/User.php
에 다음 코드 스니펫을 추가합니다.public static function boot() {
parent::boot();
static::created(function(User $model) {
WebhookCall::create()
->url(url('webhook/handler'))
->payload($model->toArray())
->throwExceptionOnFailure()
->useSecret('sign-using-this-secret')
->dispatch();
});
}
위의 코드는 기본적으로 새로 생성된 사용자에 대한 정보를
url('webhook/handler')
로 호출하고 제공된 비밀 키를 사용하여 Webhook Consumer로 전송이 실패할 경우 예외를 발생하도록 설정합니다.데이터를 Webhook Consumer로 보내는 것이 전부입니다.
페이로드 처리
이 Webhook 제공이 작동한다는 것을 입증하기 위해 동일한 Laravel 앱에서 페이로드를 수신할 것입니다.
routes/web.php
에서 새 경로 만들기Route::post('webhook/handler', function(Request $request) {
logger()->info([
'payload' => $request->all(),
'headers' => $request->headers,
]);
});
그런 다음 CSRF 토큰 확인을 비활성화해야 합니다.
protected $except = [
'webhook/handler'
];
웹후크 테스트
이제 웹후크를 테스트해 보겠습니다.
# Run in first terminal
php artisan serve
# Run in second terminal
php artisan queue:work
URL
http://localhost:8000
을 방문하여 등록하십시오.등록이 완료되면
storage/logs/laravel.log
를 엽니다. 다음과 같은 내용이 표시되어야 합니다.[2022-07-12 03:03:17] local.INFO: array (
'payload' =>
array (
'name' => 'Kirby Porter',
'email' => '[email protected]',
'updated_at' => '2022-07-12T02:59:03.000000Z',
'created_at' => '2022-07-12T02:59:03.000000Z',
'id' => 5,
'profile_photo_url' => 'https://ui-avatars.com/api/?name=K+P&color=7F9CF5&background=EBF4FF',
),
'headers' =>
Symfony\Component\HttpFoundation\HeaderBag::__set_state(array(
'headers' =>
array (
'host' =>
array (
0 => '127.0.0.1:8000',
),
'user-agent' =>
array (
0 => 'GuzzleHttp/7',
),
'content-type' =>
array (
0 => 'application/json',
),
'x-app' =>
array (
0 => 'Laravel',
),
'x-version' =>
array (
0 => '1',
),
'signature' =>
array (
0 => '665fcd8bd35088d46d577865ad1e2aa5e6ac51c8e1ea7cdc83cc700eec0d19c2',
),
'content-length' =>
array (
0 => '240',
),
),
'cacheControl' =>
array (
),
)),
)
축하합니다! Webhook 서버를 성공적으로 설정했습니다!
다음으로 Webhook Consumer 애플리케이션을 설정하겠습니다. 자세한 내용은 Webhook: Part III를 참조하세요.
Reference
이 문제에 관하여(웹훅 - 파트 II), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/nasrulhazim/webhook-part-ii-1b3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)