CodeBlanks Logo Icon CodeBlanks

Proje sonu - REST API

PHP kursu · İleri seviye · Ders 59/92

Tüm parçaları birleştirip çalışan REST API'yi tamamlarsın.

Tüm parçaları birleştirmek

Son derste tüm parçaları birleştirirsin. Router, addRoute, dispatch ve JsonResponse hazır. Şimdi dört işleyici yazacaksın: handleGet görev listesini döndürür, handlePost yeni görev oluşturur, handlePut günceller, handleDelete siler.

Ardından runRestApi() fonksiyonu bir Router örneği oluşturur, dört rotayı kaydeder, $_SERVER değerlerini elden verir ve dispatch ile isteği yürütür. Dönen JsonResponse nesnesinin send() yöntemi yapısal veriyi yazar.

Hata yanıtları

API'ler hatayı da tutarlı biçimde bildirmeli. Bilinmeyen bir yol ya da yöntem 404 ile yanıtlanır; gövdede bir hata iletisi olur. Eksik veya bozuk gövde 400 ile yanıtlanır.

Her hata yanıtı da bir JsonResponse örneğidir; böylece başarılı ve hatalı yanıtlar aynı yapıyı paylaşır. İstemci tek bir ayrıştırıcıyla her durumu ele alır.

Uygulama runRestApi fonksiyonunu yaz

runRestApi() fonksiyonunu yaz. İçinde yeni bir Router oluştur ve dört rotayı addRoute ile ekle: GET /tasks, POST /tasks, PUT /tasks/1, DELETE /tasks/1 — işleyiciler sırayla "handleGet", "handlePost", "handlePut", "handleDelete". Sonra $_SERVER["REQUEST_METHOD"] = "GET"; ve $_SERVER["PATH_INFO"] = "/tasks"; ata, dispatch ile isteği yürüt ve dönen JsonResponse nesnesinin send() çıktısını döndür.

Örnek çözümü göster
string { ... } yaz. İçinde $router = new Router(); ile başla. Dört $router->addRoute(...) çağrısı yap. $_SERVER["REQUEST_METHOD"] = "GET"; ve $_SERVER["PATH_INFO"] = "/tasks"; ata. $response = $router->dispatch($_SERVER["REQUEST_METHOD"], $_SERVER["PATH_INFO"]); ile yürüt ve return $response->send(); döndür.
Örnek çözüm:
<?php
// REST API projesi: tüm parçalar birleşti — runRestApi demo'sunu yaz

class Router {
    public array $routes = [];
    public function addRoute(string $method, string $path, $handler): void {
    $this->routes[] = ["method" => $method, "path" => $path, "handler" => $handler];
}
    public function dispatch(string $method, string $path) {
    foreach ($this->routes as $route) {
        if ($route["method"] === $method && $route["path"] === $path) {
            return ($route["handler"])();
        }
    }
    return "404 Bulunamadı";
}
}

class JsonResponse {
    public int $status;
    public array $body;
    public function __construct(int $status, array $body) {
        $this->status = $status;
        $this->body = $body;
    }
    public function send(): string {
        http_response_code($this->status);
        header("Content-Type: application/json");
        return json_encode($this->body, JSON_UNESCAPED_UNICODE);
    }
}

function handleGet(): JsonResponse {
    return new JsonResponse(200, ["tasks" => [["id" => 1, "title" => "İlk görev"]]]);
}
function handlePost(): JsonResponse {
    return new JsonResponse(201, ["message" => "Oluşturuldu"]);
}
function handlePut(): JsonResponse {
    return new JsonResponse(200, ["message" => "Güncellendi"]);
}
function handleDelete(): JsonResponse {
    return new JsonResponse(200, ["message" => "Silindi"]);
}

function runRestApi(): string {
    $router = new Router();
    $router->addRoute("GET", "/tasks", "handleGet");
    $router->addRoute("POST", "/tasks", "handlePost");
    $router->addRoute("PUT", "/tasks/1", "handlePut");
    $router->addRoute("DELETE", "/tasks/1", "handleDelete");
    $_SERVER["REQUEST_METHOD"] = "GET";
    $_SERVER["PATH_INFO"] = "/tasks";
    $response = $router->dispatch($_SERVER["REQUEST_METHOD"], $_SERVER["PATH_INFO"]);
    return $response->send();
}

// Demo:
echo runRestApi();

Kendini test et

  1. İstek yolunu tamamla

    $_SERVER["____"]
    Cevabı göster
    $_SERVER["PATH_INFO"]
  2. İşleyicileri eşleştir

    handleGet
    Listeler
    handlePost
    Oluşturur
    handlePut
    Günceller
    handleDelete
    Siler
  3. handlePost işleyicisi yeni kaynak oluşturunca hangi durum kodunu döndürmeli?

    • 201 Oluşturuldu
    • 200 Tamam
    • 404 Bulunamadı
    • 400 Geçersiz istek
    Cevabı göster

    201 Oluşturuldu — Doğru. Yeni kaynak oluşturma 201 ile bildirilir; 200 mevcut kaynağın başarılı okumusudur.

İleri seviye bölümündeki tüm dersler