API - REST Routing (application/api.php)

Dokumentacja jest stale rozwijana i aktualizowana wraz z postępem projektu. Ponieważ powstaje ona równolegle z kodem, niektóre sekcje mogą tymczasowo odnosić się do wcześniejszych wersji systemu - są one sukcesywnie dostosowywane do bieżącego stanu aplikacji. Jeśli zauważysz nieaktualne informacje, zgłoś to lub załóż Issue / Pull Request.

Dokumentacja

# API - REST Routing (application/api.php)

System API w DbM Framework pozwala tworzyć lekkie, bezpieczne i zgodne z REST interfejsy JSON. Każdy endpoint zwraca dane w formacie JSON przy użyciu jsonResponse().


# Definiowanie tras API

Trasy API umieszczamy w pliku application/api.php.

$router->get('/api/path', [NameApiController::class, 'methodName'], 'api_route_name');

# Dostępne metody

MetodaCel
GETPobranie danych
POSTUtworzenie nowego zasobu
PUTAktualizacja istniejącego zasobu
DELETEUsunięcie zasobu

# Przykład grupy REST

$router->group('/api/articles', function (Router $router) {
    $router->get('/', [ArticleApiController::class, 'list'], 'api_articles_list');
    $router->get('/{id}', [ArticleApiController::class, 'get'], 'api_articles_get');
    $router->post('/', [ArticleApiController::class, 'create'], 'api_articles_create');
    $router->put('/{id}', [ArticleApiController::class, 'update'], 'api_articles_update');
    $router->delete('/{id}', [ArticleApiController::class, 'delete'], 'api_articles_delete');
});

# Format odpowiedzi

Każda odpowiedź API powinna zwracać dane w formacie JSON:

return $this->jsonResponse([
    'success' => true,
    'data' => $articles
], 200);

W przypadku błędu:

{
    "success": false,
    "message": "Unauthorized API access!"
}

# Autoryzacja API

Każdy kontroler API dziedziczy po BaseApiController, który obsługuje weryfikację sesji i ról.

protected function authorizeApiAccess(?string $role = null): void
{
    $sessionKey = $this->getSession(getenv('APP_SESSION_KEY'));
    if (empty($sessionKey)) {
        throw new UnauthorizedApiException("Unauthorized API access!");
    }
}

Można ją wywołać np. w konstruktorze:

$this->authorizeApiAccess(ConstantConfig::USER_ROLES['A']);


# Przykładowe wywołania API (AJAX / JS)

fetch('/api/articles')
  .then(res => res.json())
  .then(data => console.log(data));

fetch('/api/articles', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ title: 'Nowy artykuł', content: '...' })
});

# Middleware

API można rozszerzyć o middleware globalne lub dla prefixu /api, np.:

$router->addMiddleware(function ($request) {
    if (!isset($request->getServerParams()['HTTP_AUTHORIZATION'])) {
        return BaseApiController::error('Unauthorized', 401);
    }
    return null;
}, '/api');

# Podsumowanie

API w DbM Framework to:

  • pełna zgodność z REST,
  • oddzielny plik api.php,
  • natywna obsługa JSON i błędów,
  • prosty system autoryzacji i middleware.

Lekkość i czytelność - idealne rozwiązanie dla MVP i paneli administracyjnych.