Guzzle ile Tanışma

Share Button

Yazılım geliştiricilerinin en büyük şansları keyifsiz günlerde bugün benim yaptığım gibi context switch yapabilme yetenekleri olsa gerek. Geçtiğimiz haftasonundan bu yana gerçekten keyifsiz günler geçiriyorum. Deli gibi kod okuyorum, yazı yazıyorum. Bu da yazdıklarımdan birisi…

Bu gece guzzle kütüphanesinin kaynak kodlarının bir kısmını ve dökümanlarını okudum. Ufak bir inceleme yazısı ve çok basit bir örneği sizlerle paylaşmak istedim. Umarım başlangıç için yararlı olur. Keyifli okumalar…

***

Daha önce Osman Üngür’ün Paranoia için yaptığı önerilere istinaden Guzzle ile tanışma fırsatını yakaladım. Bu vesileyle Osman’ a da çok teşekkür ediyorum.

Guzzle, arka tarafta düşünülen bunca inceliğe karşın kullanıcılarına son derece güçlü, kullanışlı ve son derece basit bir arayüz sunuyor. Gerçekten çok kısa sürede basit bir restful istemcisi yapabilirsiniz. Ayrıca içinde barındırdığı symfony2 nin event dispatcher bileşeni sayesinde kod tabanınızın temiz kalmasını ve diğer sistemlerle entegrasyonunu kolayca gerçekleştirebilmenizi sağlıyor.

Kodu okudukca hayranlığım katlanarak arttı.Her okuduğum kod parçası bana budur dedirtti. Az önce de belirttiğim gibi kendisi symfony2 event dispatcher’ın gücüne sahip. Bağımlılık konusunu o kadar güzel yönetmeişler ki kütüphanenin dilerseniz tamamını dilerseniz işinize yarayan her bir bileşenini ayrı ayrı kullanabiliyorsunuz. Paralel veya kalıcı istekler yapabilmenize olanak sunuyor. Tüm temel http metodlarını,dilerseniz isteğe bağlı metodlar kullanabiliyorsunuz. Loglama, önbellekleme, QAuth vs. vs. konularda pek çok bileşeni mevcut. Curl’ün gözü kör(l) olsun dedirtecek cinsten çok fazla özelliği var. Heyecanımı paylaşmak isteyen arkadaşlar şuradan dökümanı, buradan github reposunu inceleyebilirler.

Örnek incelemeye başlamadan önce dilerseniz composer ile guzzle ı geliştirme ortamımıza kuralım.

Şayet henüz composer ile tanışmadıysanız öncelikle aşağıdaki komutu terminalde çalıştırarak composer kurulumunu gerçekleştirebilirsiniz.

$ curl -sS https://getcomposer.org/installer | php

Şimdi de Guzzle kütüphaneisini geliştirme ortamımıza kuralım.

$ php composer.phar require guzzle/guzzle:~3.7

Şimdide basit bir örnek yapalım. Aşağıdaki örnek kod, github a bağlanarak public gist lerin listesini çekecek.

<?php
//composer autoloader vermiş, kullanmayalım mı ?
require 'vendor/autoload.php';

//guzzle kütüphanesindeki http istemciyi import edelim.
use Guzzle\Http\Client;

//Github a istek salmak üzere bir adet client oluşturalım.
$client = new Client('https://api.github.com');

//Github a salmak üzere bir adet istek oluşturuyoruz.

/* @var Guzzle\Http\Message\Request $request */
$request = $client->get('gists/public');

//isteği github'a salıyoruz.
/* @var Guzzle\Http\Message\Response $response */
$response = $request->send();

//Response geldi ama json geldi. Elin deymişken parse et diyoruz.
$data = $response->json();

print_r($data);

Gönderilen İstek ve Dönen Yanıtların Loglanması

Loglama işlemini Guzzle’ın log eklentisi ile kolaylıkkla gerçekleştirebilirsiniz. Guzzle’ın log eklentisi, Zend Framework Logger ve Monolog gibi diğer uygulamaların logger larıyla haberleşebilme yeteneğine sahiptir.

Biraz önceki örneğe ilave olarak github a yaptığınız isteği ve dönen yanıtı loglayalım.

//composer autoloader vermiş, kullanmayalım mı ?
require 'vendor/autoload.php';

use Guzzle\Http\Client;
use Guzzle\Log\Zf1LogAdapter;
use Guzzle\Plugin\Log\LogPlugin;
use Guzzle\Log\MessageFormatter;

$client = new Client('https://api.github.com');

//loglama islemi icin Zend Framework 1.x logger adaptörü oluşturalım.
$logAdapter = new Zf1LogAdapter(
    new \Zend_Log(new \Zend_Log_Writer_Stream('php://output'))
);
$logPlugin = new LogPlugin($logAdapter, MessageFormatter::DEBUG_FORMAT)
//...ve logger eklentisini istemciye ilistirelim.
$client->addSubscriber($logPlugin);

$request = $client->get('gists/public');
$response = $request->send();
$data = $response->json();

İşte hepsi bu. Olaylar, metodlar, ve daha pek çok konuyla ilgili olarak Guzzle Dökümanlarını inceleyebilirsiniz.

Share Button

About İbrahim Gündüz

1983 yılında İstanbul’da doğdu. İlkokul yıllarında cobol ve basic le olan tanışması, yazılıma olan ilgisini arttırdı 2005 yılında. Uludağ Üniversitesi Teknik Bilimler Meslek Yüksek Okulu Elektronik bölümünden mezun olan Gündüz, çeşitli alanlarda faaliyet gösteren kurumlarda yazılım geliştirici olarak görev almıştır. Mesleki ilgi alanları, ölçeklenebilir sistemler, uygulama entegrasyonları ve ödeme sistemleridir. Halen Markafoni back end geliştirici olarak çalışmaktadır.

7 Comments

  • Ocak 2, 2014 - 7:37 am | Permalink

    Öncelikle güzel bir yazı olmuş, eline sağlık.

    Fakat diğer taraftan, millet yılbaşı partilerininden henüz ayılmamışken senin bu yazıyı paylaşıyor olman çok manidar.

    Ne diyelim, “Allah ıslah etsin” :)

    • Ocak 2, 2014 - 7:46 am | Permalink

      Allah beni kendi halime bıraktı artık Coşkun. Uğraşmıyor. Bir süredir çok istediğim şeylere gelen yanıt “the person you have called cannot be reached at the moment please try again later.” şeklinde. Hayırlısı diyelim.

      • Halil Özgür
        Ocak 2, 2014 - 8:18 am | Permalink

        Abi ne dersen de öyle deme :) Her neyse eline sağlık; daha kapsamlı örnekleri bekleriz. Zira “Ben buğu file_get_contents ile yapıyom zati” diyenler çıkabilir :)

  • ömer FAruk
    Ağustos 31, 2016 - 10:45 am | Permalink

    yazı eski ama dikkatimi çekti neden “hobi olarak kullanın” dediğini merak ettim.

    • Ağustos 31, 2016 - 11:44 am | Permalink

      :) Yok yok, kesinlikle kullanın. Takıldım sadece.

      • ömer FArku
        Ağustos 31, 2016 - 12:05 pm | Permalink

        eyvallah. hayır ben kullanıyorum gayette memnunum ama bunu okuyunca merak ettim. KOnu dışı olacak ama redbean’e alternatif önerebilirmisin.

  • Bir Cevap Yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir