Search by

eor_bah545 / eorbahapi

eor_bah545

EORBAH API est un framework web PHP moderne, rapide et haute performance, conçu pour construire des API avec une syntaxe épurée, inspiré de frameworks modernes comme Express.js et FastAPI.

Package info

github.com/EORBAH/EorbahAPI

pkg:composer/eor_bah545/eorbahapi

Statistics

Installs: 2

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

v0.1.1 2026-10-23 20:20 UTC

This package is auto-updated.

Last update: 2026-10-23 20:22:36 UTC


README

EorbahAPI

Framework web PHP pour construire des API : routes déclaratives, paramètres typés validés par Svinx\Validator, pipeline HTTP testable.

License

EorbahAPI réunit trois idées : des routes déclaratives (#[Get], #[Query], #[Body]…), une validation inspirée de Pydantic (via Svinx\Validator) et un point d'entrée handle(Request): Response qui construit la réponse sans l'envoyer — donc testable, et réutilisable par n'importe quel runner (CLI, worker, autre app).

Démarrage rapide

composer require eor_bah545/eorbahapi
<?php
// public/index.php

require __DIR__ . '/../vendor/autoload.php';

use Eorbahapi\EorbahAPI;
use Eorbahapi\Params\{Path, Query};

$app = new EorbahAPI(debug: true);

$app->get('/items/{id}', function (
    #[Path(ge: 1)] int $id,
    #[Query(ge: 1, le: 100)] int $limit = 10,
) {
    return ['id' => $id, 'limit' => $limit];
});

$app->run();
$ php -S localhost:8000 -t public
$ curl "http://localhost:8000/items/7?limit=3"
{"id":7,"limit":3}

Ce que le framework fournit

Domaine Élément
Routage get/post/put/patch/delete/head/options, add_api_route, routes {id} et {chemin:path}
Paramètres #[Path], #[Query], #[Header], #[Cookie], #[Body], #[Form], #[File], #[Security], #[Depends]
Validation contraintes Svinx (ge, le, min_length, pattern, choices…), modèles BaseModel, erreurs 422 détaillées
Réponses JSONResponse, HTMLResponse, RedirectResponse, StreamingResponse, EventStreamResponse, chaîne redirect:code:url
Middlewares globaux, de route, #[Middleware(Classe::class, args: [...])], CORS, session, hôtes de confiance, rate limiting
Sécurité HTTPBearer, HTTPBasic, clés d'API, OAuth2/OIDC, JWT
Applications montées StaticFiles, JsonRPC 2.0, sous-applications EorbahAPI
Tests TestClient / TestResponse — aucun serveur, aucun socket
Contrôleurs #[Route], #[Get]… + $app->include_controller(new X(), prefix: '/api')

Documentation

Le cours complet (25 chapitres) est dans docs/fr :

Chaque chapitre s'appuie sur un fichier de docs_src/ exécuté par la suite de tests : la documentation ne peut pas dériver du code.

Le site est construit avec MkDocs (thème Material) :

python scripts/build_docs.py --install   # une fois : crée .venv-docs/ et installe MkDocs
./scripts/docs_start.sh                  # http://localhost:4000 (rechargement à chaud)
python scripts/build_docs.py             # construit build/ (publié sur GitHub Pages)

Validation

use Eorbahapi\Params\Body;
use Svinx\Validator\BaseModel;
use Svinx\Validator\Field;

class Product extends BaseModel
{
    #[Field(min_length: 2, max_length: 50)]
    public string $name;

    #[Field(gt: 0)]
    public float $price;
}

$app->post('/products', fn (#[Body] Product $product) => $product->model_dump());

Une valeur invalide produit une réponse 422 :

{
  "error": true,
  "status": 422,
  "message": "Request validation error",
  "details": [{"loc": ["query", "limit"], "type": "value_error", "msg": "Le paramètre query 'limit' doit être >= 1"}]
}

Tests

composer test                          # toute la suite (177 tests)
./vendor/bin/phpunit --filter ExamplesTest   # valide les exemples de la doc
use Eorbahapi\EorbahAPI;
use Eorbahapi\Testing\TestClient;

$app = new EorbahAPI();
$app->get('/ping', fn () => ['pong' => true]);

$response = (new TestClient($app))->get('/ping');

$response->assertStatus(200)->json();   // ['pong' => true]

Développer avec un agent

La carte du projet destinée aux assistants de code se trouve dans .agents/skills/eorbahapi : architecture, pipeline d'une requête, invariants, recettes, conventions de tests et de doc.

Licence

Distribué sous licence MIT. Voir LICENSE et CONTRIBUTING.md.