diff --git a/src/api/__init__.py b/src/api/__init__.py index fff577c..4dd2e5b 100644 --- a/src/api/__init__.py +++ b/src/api/__init__.py @@ -1 +1,20 @@ -# decp.info — API privée. init_api(server) sera ajouté Task 6. +from flask_smorest import Api + +from src.api import routes + + +def init_api(server) -> None: + """Enregistre le blueprint d'API privée sur le serveur Flask.""" + server.config.setdefault("API_TITLE", "decp.info API") + server.config.setdefault("API_VERSION", "v1") + server.config.setdefault("OPENAPI_VERSION", "3.0.3") + server.config.setdefault("OPENAPI_URL_PREFIX", "/api/v1") + server.config.setdefault("OPENAPI_JSON_PATH", "openapi.json") + server.config.setdefault("OPENAPI_SWAGGER_UI_PATH", "swagger") + server.config.setdefault( + "OPENAPI_SWAGGER_UI_URL", + "https://cdn.jsdelivr.net/npm/swagger-ui-dist/", + ) + + api = Api(server) + api.register_blueprint(routes.bp) diff --git a/src/api/routes.py b/src/api/routes.py new file mode 100644 index 0000000..759ff1b --- /dev/null +++ b/src/api/routes.py @@ -0,0 +1,14 @@ +from flask_smorest import Blueprint + +bp = Blueprint( + "api_v1", + "api_v1", + url_prefix="/api/v1", + description="API privée decp.info — accès tabulaire aux marchés publics.", +) + + +@bp.route("/health") +def health(): + """Sonde de santé, sans authentification.""" + return {"status": "ok"} diff --git a/tests/api/test_health.py b/tests/api/test_health.py new file mode 100644 index 0000000..3bddbfd --- /dev/null +++ b/tests/api/test_health.py @@ -0,0 +1,16 @@ +from flask import Flask + +from src.api import init_api + + +def _make_app(): + app = Flask(__name__) + init_api(app) + return app + + +def test_health_returns_ok_without_auth(): + app = _make_app() + resp = app.test_client().get("/api/v1/health") + assert resp.status_code == 200 + assert resp.get_json() == {"status": "ok"}