Harici API'lerle Etkileşim İçin Laravel'in Yerleşik İstemcisini Kullanma

Yayınlanan: 2023-04-24

Laravel, API etkileşimlerini hem yeni hem de deneyimli web geliştiricileri için çocuk oyuncağı haline getirir. Larvel HTTP istemcisi, geliştiricilere HTTP istekleri yaparken daha sorunsuz bir deneyim sağlamak için PHP'nin Guzzle HTTP istemcisi üzerine kurulmuştur. Birincil özellikleri, kimlik doğrulama, yönlendirme ve etkili nesne-ilişkisel eşlemeyi (ORM) içerir.

Bu makale, isteklerde bulunmak, yanıtlarda hata ayıklamak, ara yazılım ve makrolar oluşturmak ve daha fazlası için Laravel'in HTTP istemcisini kullanmayı keşfedecektir.

API'ler için Zor İşi Sizin Yerinize Laravel HTTP İstemcisi Yapar

Guzzle, PHP için basit bir HTTP istemcisidir. Akış yetenekleri ve çok parçalı isteklerin yanı sıra GET , POST , PUT ve DELETE dahil olmak üzere farklı form istekleri için işlevsellik sunar. Guzzle HTTP istemcisi ile sunucuya senkron ve asenkron istekler göndermek mümkündür. Ayrıca, müşterinin davranışını özelleştirmek için uygun ara katman yazılımıyla birlikte gelir.

Laravel'in HTTP istemcisi, Guzzle üzerinde oluşturulmuş ancak ekstra işlevlere sahip bir sarmalayıcıdır. Başarısız isteklerin yeniden denenmesi için destek ve JSON verileriyle bazı yardımcı işlevler içerir. Laravel HTTP istemcilerinin işlevlerinin çoğu Guzzle'a benzer.

API etkileşimleri için Laravel'in yerleşik istemcisinden en iyi şekilde yararlanın! API'lerde yeni misiniz? Bu kılavuz sizi kapsıyor Tweet için Tıklayın

Önkoşullar

Aşağıdaki bölümlerde, Laravel'in HTTP istemcisi hakkında daha fazla bilgi edineceksiniz. Takip etmek için ihtiyacınız olacak:

  • Laravel, PHP ve API'ler hakkında temel bilgi
  • PHP ve Composer yüklü
  • postacı

İstek Nasıl Yapılır?

Bir istekte bulunmak için bir HTTP istemcisinin nasıl kullanılacağını anlamak için, ReqRes gibi çok sayıda barındırılan API'den yararlanabilirsiniz.

Uygulamayı oluştururken dahil edilen HTTP paketini içe aktararak başlayın. App/Http/Controllers/UserController.php dosyasının içine, dosyanın başındaki use deyiminden başlayarak ve index işlevinde kalan koddan başlayarak aşağıdaki kodu ekleyin.

 use Illuminate\Support\Facades\Http; return Http::get("https://reqres.in/api/users?page=2");

Not: Karmaşık kullanım durumları için, withHeaders yöntemini kullanarak isteği başlıklarla da gönderebilirsiniz.

Aynı dosyada, aşağıdaki kodu kullanarak yeni bir yöntem gönderisi oluşturun:

 function post() { $response = Http::withHeaders([ 'Content-Type' => 'application/json', ])->post('https://reqres.in/api/users', [ 'name' => 'morpheus', 'job' => 'leader', ]); return $response; }

Ardından, onun için route/web.php dosyasının içine bir rota ekleyin:

 Route::get('post',[UserController::class,'post']);

Şimdi, Postman bu rotayı test etmek için kullanılabilir. Postman'ı açın ve URL olarak http://127.0.0.1:8000/post'u istek türü olarak GET olarak ekleyin. Gönder'i tıkladığınızda, aşağıdaki yanıtı görürsünüz:

Postacı kullanarak istekte bulunma
Postacı kullanarak istekte bulunma

Eşzamanlı İstekler

Paralel istekler, aynı dönemde daha fazla veri alabildiğiniz için performansı önemli ölçüde artırır. Laravel'in HTTP istemcisi, havuz yöntemini kullanarak eşzamanlı istekleri gerçekleştirmeyi mümkün kılar.

App/Http/Controllers/UserController.php içine aşağıdaki kodu ekleyin:

 use Illuminate\Http\Client\Pool; function concurrent() { $responses = Http::pool(fn (Pool $pool) => [ $pool->get('https://reqres.in/api/users?page=2'), $pool->get('https://reqres.in/api/users/2'), $pool->get('https://reqres.in/api/users?page=2'), ]); return $responses[0]->ok() && $responses[1]->ok() && $responses[2]->ok(); }

Sonra, destekleyici yolu, route/web.php dosyasının içine ekleyin.

 Route::get('concurrent',[UserController::class,'concurrent']);

Rota ziyaret edildiğinde tarayıcı aşağıdaki yanıtı verir:

Eşzamanlı istekler
Eşzamanlı istekler

Makro İste

İstek makroları, ortak API yollarıyla etkileşim kurarken kullanışlıdır.

Makro oluşturmak için, aşağıdaki kodu kullanarak makroyu app/Http/Providers/AppServiceProvider.php dosyasının önyükleme yöntemi içinde tanımlamanız gerekir:

 use Illuminate\Support\Facades\Http; Http::macro('reqres', function () { return Http::baseUrl('https://reqres.in/api'); });

Not: Use deyimini dosyanın başına eklediğinizden emin olun.

Ardından, aşağıdaki kodu ekleyerek UserController içindeki makroyu kullanın:

 function macro() { $response = Http::reqres()->get('/users?page=2'); return $response; }

Gördüğünüz gibi, makro halihazırda oluşturulmakta olduğu için tam URL'yi yeniden eklemeniz gerekmez.

Son olarak, route/web.php dosyasına aşağıdaki kodu kullanarak bir rota ekleyin:

 Route::get('macro',[UserController::class,'macro']);
makro isteği
makro isteği

Yanıtların Kodu Nasıl Çözülür?

Bir yanıtın kodunu çözmek ve bir API isteğinin başarılı olduğundan emin olmak için istemcide bulunan durum yöntemini kullanırsınız. Bu yöntem, sunucudan gönderilen durum kodunu alır ve görüntüler.

Bunu test etmek için önceki makro kodunu App/Http/Controllers/UserController.php dosyasının içindeki aşağıdaki kodla değiştirin:

 function macro() { $response = Http::reqres()->get('/users?page=2'); return $response->status(); }

Burada durum kodu 200, isteğin başarılı olduğu anlamına gelir.

Başarılı kod çözme yanıtı
Başarılı kod çözme yanıtı

JSON API'leri Nasıl Test Edilir?

Laravel, JSON API'lerini ve bunların yanıtlarını test etmek için birkaç yardımcıya sahiptir. Yardımcı işlevler arasında json , getJson , postJson , putJson , patchJson , deleteJson vb. bulunur.

Testi daha iyi anlamak için, GET kullanıcısının rotası için bir test senaryosu oluşturun. Laravel uygulamasını önyüklediğinizde, Örnek Test zaten oluşturulmuştur. testler/Feature/ExampleTest.php dosyasının içinde mevcut kodu aşağıdakiyle değiştirin:

 <?php namespace Tests\Feature; use Illuminate\Foundation\Testing\RefreshDatabase; use Tests\TestCase; class ExampleTest extends TestCase { /** * A basic test example. * * @return void */ public function test_example() { $response = $this->getJson('/users'); $response->assertStatus(200); } }

Eklenen kod, kullanıcının rotasındaki JSON verilerini getirir ve durum kodunun 200 olup olmadığını kontrol eder.

Test kodunu ekledikten sonra, testleri çalıştırmak için terminalinizde aşağıdaki komutu çalıştırın:

 ./vendor/bin/phpunit

Testler tamamlandığında, her ikisi de başarılı olan iki test gerçekleştirdiğini göreceksiniz.

JSON API'lerini test etme
JSON API'lerini test etme

Benzer şekilde, farklı istek türlerini kontrol edebilir ve daha karmaşık testler için diğer yardımcı yöntemleri kullanabilirsiniz.

Olaylar Nasıl İşlenir?

Laravel, HTTP istekleriyle uğraşırken tetiklenecek üç olay sunar.

  • İstek gönderilmeden önce olan RequestSending .
  • ResponseRequired , bir yanıt alındığında.
  • ConnectionFailed , yanıt alınmadığında ortaya çıkar.

Üç olayın tümü Illuminate\Http\Client\Request örneğini denetlemek için $request özelliğini içerir ve ResponseReceived ek bir $response property sahiptir. Bunlar, bir olaydan sonra eylemleri gerçekleştirmek için özellikle kullanışlıdır. Örneğin, başarılı bir yanıt aldıktan sonra e-posta göndermek isteyebilirsiniz.

Bir olay ve dinleyici oluşturmak için app/Providers/EventServiceProvider.php dosyasına gidin ve listen dizisini aşağıdaki kodla değiştirin.

 protected $listen = [ Registered::class => [ SendEmailVerificationNotification::class, ], 'Illuminate\Http\Client\Events\ResponseReceived' => [ 'App\Listeners\LogResponseReceived', ], ];

Ardından terminalinizde aşağıdaki komutu çalıştırın:

 php artisan event:generate

Yukarıdaki komut , app/Listeners/LogResponseRequired.php dinleyicisini yaratacaktır. Bu dosyanın kodunu aşağıdaki kodla değiştirin:

 <?php namespace App\Listeners; use Illuminate\Http\Client\Events\ResponseReceived; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\Log; class LogResponseReceived { /** * Create the event listener. * * @return void */ public function __construct(Request $request, Response $response) { Log::channel('stderr')->info($response->status()); } /** * Handle the event. * * @param \Illuminate\Http\Client\Events\ResponseReceived $event * @return void */ public function handle(ResponseReceived $event) { } }

Durum kodunun bilgi günlüğü terminalde yazdırılır.

Durum kodunu gösteren terminal günlükleri
Durum kodunu gösteren terminal günlükleri

Sorunsuz bir API deneyimi için Laravel ve Guzzle'ın gücünü birleştirin. Web geliştirme becerilerinizin seviyesini yükseltmeye hazır mısınız? Buradan başlayın Tweetlemek için tıklayın

Özet

Bir web sitesi veya web uygulaması ister bir kuruluş, ister bağımsız bir geliştirici tarafından yapılmış olsun, API'ler başarılarının anahtarıdır. Ancak bunları kullanmak zor olabilir.

Pek çok çerçeve ve kitaplık bu süreci basitleştirmeyi vaat ediyor, ancak Laravel basitliğe ve kullanım kolaylığına odaklanmasıyla öne çıkıyor. Yerleşik istemcileri, kolay API çağrılarını, eşzamanlı API çağrılarını, API Makrolarını, JSON tabanlı API'ler için yardımcı yöntemleri ve daha fazlasını destekler.