Systém a vrstvy

Technologický rámec

  • jazyk: PHP
  • persistence: PostgreSQL
  • search engine: Meilisearch
  • architektura: bez ORM, bez plného frameworku, vlastní core/

Aplikační vrstvy

Bootstrap a routing

app/bootstrap.php rozhoduje podle prefixu URL, zda se obslouží api nebo admin část.

To znamená, že už dnes je projekt připravený fungovat jako jedna aplikace se dvěma vstupy:

  • public katalogové čtení,
  • admin zápis a správa.

Routes

app/routes/api.php a app/routes/admin.php definují endpointy a middleware pipeline.

Middleware

Middleware jsou funkce, ne třídy. Aktuálně jde hlavně o:

  • CORS,
  • HTTP hlavičky,
  • autentizaci pro admin část.

Controllers

Controller parsuje request, validuje vstup a vrací JSON response. Neměl by v sobě držet těžké SQL.

Repositories

Repository obsahuje přímé SQL dotazy přes DB::results(), DB::row() a DB::var().

Database

Datový model je rozdělený do více PostgreSQL schémat podle domén. To je důležitá architektonická hranice.

Jak chápat vztah public API vs. admin

V této architektuře není cílem, aby admin v první fázi používal public API jako interní write vrstvu.

Pragmatický první krok je:

  • public API slouží ke čtení katalogu,
  • admin API slouží k zápisu a workflow,
  • obě části běží nad stejnou aplikací, stejnými doménovými pravidly a stejnou databází.

To je jednodušší a bezpečnější než stavět zvlášť public API, zvlášť admin backend a mezi nimi další integrační vrstvu ještě předtím, než je stabilní datový model.

Současný tok requestu

  1. Request přijde do app/bootstrap.php.
  2. Routing vybere api nebo admin.
  3. Pipeline aplikuje middleware.
  4. Controller zavolá repository.
  5. Repository udělá přímé SQL nad konkrétním schématem.
  6. Controller vrátí JSON ve formátu data nebo error.