RESTful API Nedir?
REST (Representational State Transfer), web servislerinin standart HTTP metodları (GET, POST, PUT, DELETE) ile iletişim kurmasını sağlayan bir mimari stildir. Modern web ve mobil uygulamaların omurgasını oluşturur.
1. Basit Router
<?php
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET,POST,PUT,DELETE');
$method = $_SERVER['REQUEST_METHOD'];
$path = trim($_SERVER['PATH_INFO'] ?? '/', '/');
$parts = explode('/', $path);
switch ($parts[0]) {
case 'products':
if ($method === 'GET' && isset($parts[1]))
get_product($parts[1]);
elseif ($method === 'GET')
list_products();
elseif ($method === 'POST')
create_product();
break;
}
2. JWT Token Oluşturma
function create_jwt($user_id, $secret) {
$header = base64_encode(
json_encode(['alg' => 'HS256', 'typ' => 'JWT'])
);
$payload = base64_encode(
json_encode([
'sub' => $user_id,
'iat' => time(),
'exp' => time() + 3600,
])
);
$signature = base64_encode(
hash_hmac('sha256',
$header . '.' . $payload,
$secret, true)
);
return $header . '.' . $payload . '.' . $signature;
}
3. JWT Doğrulama Middleware
function verify_jwt($token, $secret) {
$parts = explode('.', $token);
if (count($parts) !== 3) return false;
[$header, $payload, $sig] = $parts;
$expected = base64_encode(
hash_hmac('sha256',
$header . '.' . $payload,
$secret, true)
);
if (!hash_equals($expected, $sig))
return false;
$data = json_decode(
base64_decode($payload), true
);
if ($data['exp'] < time())
return false;
return $data;
}
function auth_middleware() {
$auth = $_SERVER['HTTP_AUTHORIZATION'] ?? '';
if (!preg_match('/Bearer\s+(\S+)/', $auth, $m)) {
http_response_code(401);
echo json_encode(['error' => 'Token gerekli']);
exit;
}
return verify_jwt($m[1], JWT_SECRET);
}