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();