Client-Projekt-Startanleitung
Diese Anleitung erklärt, wie NENE2 in ein kleines Client-artiges API-Projekt adaptiert wird.
Absichtlich praktisch und manuell. Das Ziel ist es, die erste Projektübergabe glaubwürdig zu machen, bevor Generatoren oder breite Framework-Komfort-Schichten hinzugefügt werden.
Ausgangspunkt
Verwenden Sie diese Anleitung, wenn ein Projekt benötigt:
- eine laufende lokale JSON-API
- OpenAPI-Dokumentation, die früh geteilt werden kann
- einen kleinen Satz getesteter Endpunkte
- optionale React-Starter-Integration
- sichere lokale MCP-Inspektion über dokumentierte API-Grenzen
- grundlegende Machine-Client-Authentifizierung
- einen Docker-basierten Datenbank-Verifikationspfad
NENE2 ist noch eine 0.x-Grundlage. Öffentliche Verträge als nützlich, aber noch in Bildung, behandeln.
Öffentliche Feldtest-Referenz-Sandbox (optional)
Nach dem ersten lokalen Meilenstein kann es helfen, eine abgeschlossene öffentliche Demo zu inspizieren, die auf dem dokumentierten Scaffold-Pfad geblieben ist:
- Repository:
hideyukiMORI/sakura-exhibition-nene2-field-trial(basiert auf NENE2v0.1.1). - Inhalt: nur-lesende Ausstellungs-JSON-APIs, OpenAPI, PHPUnit, lokale MCP-Tools und Markdown-Feldtest-Notizen.
Dies ist kein offizielles Produkt-Repository und impliziert keine Befürwortung einer echten Ausstellung. Fiktive Sandbox-Daten — lesen Sie README.md und SECURITY.md dieses Projekts, bevor Sie Namen oder Jahre als Fakten behandeln.
Start von composer require
Wenn Sie ein neues Projekt von Grund auf starten statt das NENE2-Repository zu forken:
bash
mkdir my-project && cd my-project
composer init --name="vendor/my-project" --no-interaction
composer require hideyukimori/nene2:^0.3Dann die minimalen Dateien manuell erstellen:
.env
dotenv
APP_ENV=local
APP_DEBUG=true
APP_NAME="My Project"
DB_ADAPTER=sqlitepublic/index.php — Front-Controller mit eingebautem Container:
php
<?php
declare(strict_types=1);
use Nene2\Http\ResponseEmitter;
use Nene2\Http\RuntimeContainerFactory;
use Nyholm\Psr7\Factory\Psr17Factory;
use Nyholm\Psr7Server\ServerRequestCreator;
use Psr\Http\Server\RequestHandlerInterface;
require dirname(__DIR__) . '/vendor/autoload.php';
$container = (new RuntimeContainerFactory(dirname(__DIR__)))->create();
$psr17 = $container->get(Psr17Factory::class);
$request = (new ServerRequestCreator($psr17, $psr17, $psr17, $psr17))->fromGlobals();
$response = $container->get(RequestHandlerInterface::class)->handle($request);
$container->get(ResponseEmitter::class)->emit($response);Lokal mit dem eingebauten PHP-Server bereitstellen:
bash
php -S localhost:8080 -t publicBenutzerdefinierte Routen hinzufügen
Benutzerdefinierte Routen über $routeRegistrars übergeben:
php
use Nene2\Http\RuntimeApplicationFactory;
use Nene2\Routing\Router;
$app = (new RuntimeApplicationFactory(
$psr17,
$psr17,
routeRegistrars: [
static function (Router $router) use ($json): void {
$router->get('/items/{id}', static function (ServerRequestInterface $req) use ($json) {
$params = $req->getAttribute(Router::PARAMETERS_ATTRIBUTE, []);
return $json->create(['id' => (int) ($params['id'] ?? 0)]);
});
},
],
))->create();Erste Lokale Einrichtung
Von einem sauberen Klon starten:
bash
docker compose build
docker compose run --rm app composer install
docker compose run --rm app composer check
docker compose up -d appLokale API und Docs bestätigen:
bash
curl -i http://localhost:8080/health
curl -i http://localhost:8080/examples/pingNützliche Browser-URLs:
- OpenAPI:
http://localhost:8080/openapi.php - Swagger-Oberfläche:
http://localhost:8080/docs/
Projektgrenze umbenennen
Vor dem Hinzufügen von Anwendungsverhalten zuerst projektbezogene Metadaten aktualisieren:
- Projektbeschreibung in
README.md - Paketname und -beschreibung in
composer.json - OpenAPI
info.title,info.descriptionundinfo.version - Standardbeispiele, die NENE2 selbst nicht mehr beschreiben sollen
Ersten Anwendungsendpunkt hinzufügen
docs/development/endpoint-scaffold.md für jeden ausgelieferten JSON-Endpunkt verwenden.
- Ein fokussiertes GitHub Issue erstellen oder wiederverwenden.
- Die Route in der kleinsten klaren Laufzeitgrenze hinzufügen.
- Den OpenAPI-Pfad,
operationId, Schema und Beispiele hinzufügen. - Laufzeittests nahe am Endpunktverhalten hinzufügen.
tests/OpenApi/RuntimeContractTest.phpdie dokumentierten Erfolgsbeispiele verifizieren lassen.- Einen lokalen HTTP-Smoke-Check über Docker ausführen.
OpenAPI als Übergabevertrag behalten
OpenAPI sollte im selben PR wie Endpunktverhalten aktualisiert werden.
Vor dem Versand der Übergabe ausführen:
bash
docker compose run --rm app composer openapi
docker compose run --rm app composer checkMCP nur über API-Grenzen hinzufügen
- OpenAPI-Operation hinzufügen oder bestätigen.
- Einen Read-only-Eintrag in
docs/mcp/tools.jsonhinzufügen. docker compose run --rm app composer mcpausführen.- Den lokalen MCP-Server nur gegen lokale APIs smoke-testen.
Machine-Client-Pfade schützen
bash
NENE2_MACHINE_API_KEY=local-dev-key docker compose up -d app
curl -i -H 'X-NENE2-API-Key: local-dev-key' http://localhost:8080/machine/healthKeine echten API-Schlüssel, generierten Secrets oder lokalen .env-Dateien committen.
Dockerfile für das Client-Projekt einrichten
Wenn das Client-Projekt php:8.4-cli als Docker-Basis-Image verwendet, müssen Composer und die benötigten PHP-Erweiterungen manuell installiert werden.
dockerfile
FROM php:8.4-cli
RUN apt-get update && apt-get install -y \
libsqlite3-dev libonig-dev curl unzip \
&& docker-php-ext-install pdo pdo_sqlite pdo_mysql \
&& curl -sS https://getcomposer.org/installer \
| php -- --install-dir=/usr/local/bin --filename=composer \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install --no-dev --optimize-autoloader
COPY . .Qualitätswerkzeuge für das Client-Projekt einrichten
Bei Verwendung von declare_strict_types in .php-cs-fixer.php wird der Fixer als risky klassifiziert und benötigt das Flag --allow-risky=yes. Fügen Sie es in die composer.json-Skripte ein:
json
{
"scripts": {
"cs": "php-cs-fixer check --diff --allow-risky=yes",
"cs:fix": "php-cs-fixer fix --allow-risky=yes"
}
}Datenbankverhalten verifizieren
bash
docker compose up -d mysql
docker compose run --rm app composer test:database:mysqlÜbergabe-Checkliste
Vor der Übergabe eines Client-artigen Projekts bestätigen:
README.mdbeschreibt das Projekt, nicht nur den Starter.docs/openapi/openapi.yamlentspricht dem ausgelieferten JSON-Verhalten.- Swagger-Oberfläche lädt lokal.
- Neue Endpunkte haben Laufzeittests und OpenAPI-Beispiele.
- Geschützte Routen dokumentieren erforderliche Anmeldedaten ohne Secret-Werte preiszugeben.
- MCP-Tools, falls vorhanden, rufen nur dokumentierte API-Grenzen auf.
docker compose run --rm app composer checkbesteht.- Zurückgestellte Arbeit ist in
docs/todo/current.mdsichtbar.
Nützliche Folgedokumente
- Domain-Layer-Richtlinie:
docs/development/domain-layer.md - Endpoint-Scaffold-Workflow:
docs/development/endpoint-scaffold.md - Lokale MCP-Server-Anleitung:
docs/integrations/local-mcp-server.md - Authentifizierungsgrenze:
docs/development/authentication-boundary.md - Datenbanktest-Strategie:
docs/development/test-database-strategy.md