Basit Kimlik Doğrulaması ile RESTful API Servisi [PHP]

Merhaba!

Başlamadan önce, API servisini barındırmak için bir web sitesi kurmanız gerekecektir. Güvenliği için, tüm isteklerde SSL kullanmayı tercih etmelisiniz. Bu isteklerde SSL yoksa yanıt olumsuz olmalıdır. Bu, web siteniz için bir SSL sertifikası ihtiyacınızın olduğunu gösterir. Bu sayede tüm istekler şifrelenerek korunacaktır.

Ben, Restful API servisini PHP ile kurmak için Slim Framework kullanmayı tercih ettim. Performanslı yapısıyla ihtiyaçlarımızı en iyi şekilde karşılayacağını düşünüyorum.


server {
        listen 80;
        server_name domainadiniz.com;
        rewrite        ^ https://$server_name$request_uri? permanent;
        }
}

Slim Framework hakkında bilgi sahini olmak için gerekli dökümantasyonları buradan okuyabilirsiniz.

Slim Framework indirmek için;

$ php composer.phar create-project slim/slim-skeleton [my-app-name]

Slim Framework Dökümantasyon (İngilizce)

Ben bildiğinizi varsayarak devam edeceğim. İlk olarak route yapımızı oluşturuyoruz.


require 'vendor/autoload.php';
require_once 'lib/mysql.php';
 
// initialize the app
$app = new \Slim\Slim();
 
// Queries
$app->get('/', 'home');
$app->get('/veri', 'getveriler');
$app->post('/veri', 'postveriler');


$app->hook('slim.before.dispatch', function () use ($app){

        $headers = request_headers();
        $response = array();
        $app = \Slim\Slim::getInstance();

        $api_key = $headers['X-API-KEY'];

        if($api_key == '612e648bf9594adb50844cad6895f2cf') {
                $auth = true;
        } else if ($api_key == NULL) {
                $response["error"] = true;
                $response["message"] = '{"error":{"text": "api key gönderilmedi" }}';
                $app->response->headers['X-Authenticated'] = 'False';
                $auth = false;
                $app->halt(401, $response['message']);
        } else {
                $response["error"] = true;
                $response["message"] = '{"error":{"text": "api key geçersiz" }}';
                $app->response->headers['X-Authenticated'] = 'False';
                $auth = false;
        }

        if(!$auth){
                $req = $_SERVER['REQUEST_URI'];
                if ($req != "/") {
                $app->halt('403', $response['message']); 
                }
        }

});

$app->run();

Youtube Data API v3 [PHP]

Youtube api kullanarak mini projeler geliştirebilirsiniz. Eğer büyük projelerde kullanmak istiyorsanız Google amcanın request izinlerine bir göz atmalısınız. Bu yazımda sizlere Youtube API kullanımındaki temelleri anlatacağım.

API Kimlik Bilgileri

Önce, Google Konsolunuzdan API kimlik bilgilerini almalısınız. Google’ın sunduğu tüm API’ler için sadece bir tane API kimlik bilgisi vardır, bunun için yapmanız gereken tek şey Google Console sayfasınaki API’yi etkinleştirmektir. API Console sayfasına tıkladığınızda şu şekilde bir sayfa göreceksiniz.

Google API Console
Google API Console

İhtiyacımız olan şey, Youtube Data API v3. Tıklayın ve etkinleştirin. API kimlik bilgileriniz yoksa API’lar ve Kimlik Doğrulaması’nın altındaki ‘Kimlik Bilgileri’ ni tıklayabilir ve Genel API Erişimi bölümünün altındaki ‘Yeni Anahtar oluştur’ seçeneğini tıklayabilirsiniz. Tıkladığınızda Google amca API Anahtarı üretecektir. Bu anahtar Youtube ile karşılıklı istek ve cevap için konuşmanızı sağlayacaktır.

Youtube API v3 Client Dosyaları

Anahtarımızı başarılı bir şekilde aldığınızı varsayarak (Alamadığınızda yorum alanını kullanarak benden destek isteyebilirsiniz) bulunması gereken zorunluluklardan bahsedelim.

Bilgisayarınızda composer yüklü ise şu komutu kullanarak dosyaları indiriyoruz;

composer require madcoda/php-youtube-api

ile vendor klasörünü indirip sunucuya dosyaları gönderiyoruz.

Bilgisayarınızda composer yüklü değilse;

https://github.com/bercanozcan/php-youtube-api

linkinden indirebilir ve gerekli dosyaları sunucuya gönderebilirsiniz.

Artık Youtube Data API v3 erişimi için bir engelimiz kalmadı. Şimdi PHP ile bir sayfa oluşturup. Vendor içerisindeki autoload.php dosyasını sayfaya require edelim ve az önce Google Console’dan almış olduğumuz API KEY tanımlamasını yapalım.

require 'vendor/autoload.php';
$youtube = new Youtube(array('key' => 'API_KEY'));

Youtube API v3 Basit Video Arama

Şimdi izin verilen tüm özellikleri kullanmak tamamen projenizle doğru orantılıdır. Bu sebeple ben size en temel referans olan arama isteklerinden örnek vereceğim. Siz projenize göre istediğiniz gibi geliştirebilirsiniz.

$results = $youtube->search('Aramak istediğiniz anahtar kelime');

Bu şekilde arattığımızda $results değişkeni bize bir dizi döndürecektir.

Youtube API v3 Gelişmiş Video Arama

Puanına göre, eklenme tarihine göre vs şeklinde gelişmiş bir arama kullanmak istiyorsanız bu şekilde sınıfları kullanabilirsiniz.

$results = $youtube->searchAdvanced(array(
    'q' => 'yelkenli',
    'part' => 'snippet',
    'order' => 'rating'
));

Tüm sorularınız için yorum alanını kullanmaktan çekinmeyin. İyi çalışmalar.

Elasticsearch ve PHP [Başlangıç]

Elasticsearch kurulumu için öncelikle sunucuda JAVA yüklü olmalıdır. Bu sebeple bir çok linux dağıtımının depolarında mevcut olmadığı için şu şekilde kurulumu yapıyoruz;

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

Bu şekilde JAVA sistemimize yüklenmiştir. Şimdi versiyonunu kontrol ederek yüklenip yüklenmediğine bakalım.

java -version

Komutu ile kontrol edebiliriz.

Elasticsearch Kurulumu

Elasticsearch’ün ne olduğunu bildiğinizi varsayarak devam ediyorum. Linux sunucunuza Elasticsearch kurulumu için öncelikle en güncel paketi sunucuya indirip kuruyoruz.

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.5.2.tar.gz
mkdir es
tar -xf elasticsearch-1.5.2.tar.gz -C es
cd es
./bin/elasticsearch

Kurulum hazır. Default olarak erişim portları 9200 olarak ayarlanmıştır. Yani şu kelide panelimize giriş yapmamız mümkün.

http://localhost:9200

Karşımıza JSON formatında karşılama sayfası çıkacaktır. Get ile gönderdiğiniz tüm filtreler için kullanabilirsiniz.

Örnek:

{
  name: "node_name",
  cluster_name: "cluster_name",
  cluster_uuid: "u6r4uQvScVfL06r4uzWg",
  version: {
    number: "2.4.1",
    build_hash: "cbdd18d6fe1e9c32ee79672416203552c4cbcd16",
    build_timestamp: "2016-09-27T18:57:55Z",
    build_snapshot: false,
    lucene_version: "5.5.2"
  },
  tagline: "You Know, for Search"
}

İyzico Ödeme Entegrasyonu [PHP]

İyzico ile ödeme sistemini entegre etmek için öncelikle PHP sürümünüz 5.3 yada üzeri olmalıdır. iyzico resmi api desteğini isterseniz composer ile yükleyebilir veya github üzerinden download edebilirsiniz.

composer require iyzico/iyzipay-php

Komutunu kullanarak composer aracılığıyla indirebilirsiniz. Daha sonra yapmanız gereken, dosyaları sisteminize include etmek olmalıdır. Bunu ise composer sonrası sistemin yarattığı autload.php dosyasıdır. Bunu çağırmak için;

require_once('vendor/autoload.php');

kodunu sayfanızın başına ekliyoruz.
Şimdi sıra geldi ödeme terminalini sisteminize uyarlı hale getirmeye;

$options = new \Iyzipay\Options();
$options->setApiKey("api key");
$options->setSecretKey("secret key");
$options->setBaseUrl("https://sandbox-api.iyzipay.com");
$request = new \Iyzipay\Request\CreatePaymentRequest();
$request->setLocale(\Iyzipay\Model\Locale::TR);
$request->setConversationId("123456789");
$request->setPrice("1");
$request->setPaidPrice("1.1");
$request->setCurrency(\Iyzipay\Model\Currency::TL);
$request->setInstallment(1);
$request->setBasketId("B67832");
$request->setPaymentChannel(\Iyzipay\Model\PaymentChannel::WEB);
$request->setPaymentGroup(\Iyzipay\Model\PaymentGroup::PRODUCT);
$paymentCard = new \Iyzipay\Model\PaymentCard();
$paymentCard->setCardHolderName("John Doe");
$paymentCard->setCardNumber("5528790000000008");
$paymentCard->setExpireMonth("12");
$paymentCard->setExpireYear("2030");
$paymentCard->setCvc("123");
$paymentCard->setRegisterCard(0);
$request->setPaymentCard($paymentCard);
$buyer = new \Iyzipay\Model\Buyer();
$buyer->setId("BY789");
$buyer->setName("John");
$buyer->setSurname("Doe");
$buyer->setGsmNumber("+905350000000");
$buyer->setEmail("email@email.com");
$buyer->setIdentityNumber("74300864791");
$buyer->setLastLoginDate("2015-10-05 12:43:35");
$buyer->setRegistrationDate("2013-04-21 15:12:09");
$buyer->setRegistrationAddress("Nidakule Göztepe Merdivenköy Mah. Bora Sok. No:1");
$buyer->setIp("85.34.78.112");
$buyer->setCity("Istanbul");
$buyer->setCountry("Turkey");
$buyer->setZipCode("34732");
$request->setBuyer($buyer);
$shippingAddress = new \Iyzipay\Model\Address();
$shippingAddress->setContactName("Jane Doe");
$shippingAddress->setCity("Istanbul");
$shippingAddress->setCountry("Turkey");
$shippingAddress->setAddress("Nidakule Göztepe Merdivenköy Mah. Bora Sok. No:1");
$shippingAddress->setZipCode("34742");
$request->setShippingAddress($shippingAddress);
$billingAddress = new \Iyzipay\Model\Address();
$billingAddress->setContactName("Jane Doe");
$billingAddress->setCity("Istanbul");
$billingAddress->setCountry("Turkey");
$billingAddress->setAddress("Nidakule Göztepe Merdivenköy Mah. Bora Sok. No:1");
$billingAddress->setZipCode("34742");
$request->setBillingAddress($billingAddress);
$basketItems = array();
$firstBasketItem = new \Iyzipay\Model\BasketItem();
$firstBasketItem->setId("BI101");
$firstBasketItem->setName("Binocular");
$firstBasketItem->setCategory1("Collectibles");
$firstBasketItem->setCategory2("Accessories");
$firstBasketItem->setItemType(\Iyzipay\Model\BasketItemType::PHYSICAL);
$firstBasketItem->setPrice("0.3");
$firstBasketItem->setSubMerchantKey("sub merchant key");
$firstBasketItem->setSubMerchantPrice("0.27");
$basketItems[0] = $firstBasketItem;
$secondBasketItem = new \Iyzipay\Model\BasketItem();
$secondBasketItem->setId("BI102");
$secondBasketItem->setName("Game code");
$secondBasketItem->setCategory1("Game");
$secondBasketItem->setCategory2("Online Game Items");
$secondBasketItem->setItemType(\Iyzipay\Model\BasketItemType::VIRTUAL);
$secondBasketItem->setPrice("0.5");
$secondBasketItem->setSubMerchantKey("sub merchant key");
$secondBasketItem->setSubMerchantPrice("0.42");
$basketItems[1] = $secondBasketItem;
$thirdBasketItem = new \Iyzipay\Model\BasketItem();
$thirdBasketItem->setId("BI103");
$thirdBasketItem->setName("Usb");
$thirdBasketItem->setCategory1("Electronics");
$thirdBasketItem->setCategory2("Usb / Cable");
$thirdBasketItem->setItemType(\Iyzipay\Model\BasketItemType::PHYSICAL);
$thirdBasketItem->setPrice("0.2");
$thirdBasketItem->setSubMerchantKey("sub merchant key");
$thirdBasketItem->setSubMerchantPrice("0.18");
$basketItems[2] = $thirdBasketItem;
$request->setBasketItems($basketItems);
$payment = \Iyzipay\Model\Payment::create($request, $options);

Bu örnekte görüldüğü gibi kodları sisteminize uygun hale getirebilirsiniz.

Github: https://github.com/bercanozcan/iyzipay-php

PHP ile Resim Boyutlandırma

Bazen resimler istediğimiz boyutta olmuyor. Yeniden boyutlandırmak gerekebilir. Bunun için en kolay sınıflardan biri olan SimpleImage sınıfı imdadınıza yetişiyor. Dosya yolunu girdiğiniz resimlerin genişliklerini ve yüksekliklerini düzenleyebilir, en boy oranlarını korur, yüzdeli ölçeklendirme yapabilir veya tüm bunları manuel olarak belirleyip php ile yeniden eklemeyi sağlayabilirsiniz. Okumaya devam et PHP ile Resim Boyutlandırma