fix: renvoie un 404 sur une URL d'API inconnue
L'API et l'interface partagent le même port, et la route attrape-tout qui sert le SPA passait avant le 404 : n'importe quelle URL /api/* erronée repartait en index.html avec un 200. Côté client, une faute de frappe dans une URL ne ressemblait pas à une erreur mais à une réponse vide, et le vrai motif n'apparaissait qu'en inspectant le corps de la réponse. Les URL commençant par /api/ sont désormais exclues de l'attrape-tout et retombent sur un 404 JSON. Les routes de l'interface restent servies par index.html. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
import mimetypes
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi import FastAPI, HTTPException
|
||||
from fastapi.responses import FileResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
|
||||
@@ -87,6 +87,13 @@ if FRONTEND_DIST.exists():
|
||||
@app.get("/{full_path:path}", include_in_schema=False)
|
||||
async def serve_spa(full_path: str):
|
||||
"""Serve the SPA for all non-API routes."""
|
||||
# Une URL d'API inconnue doit se dire inconnue. Sans cette garde, elle
|
||||
# tomberait dans le catch-all et repartirait en index.html avec un 200 :
|
||||
# côté client, une faute de frappe dans une URL ne ressemblerait plus à
|
||||
# une erreur mais à une réponse vide.
|
||||
if full_path == "api" or full_path.startswith("api/"):
|
||||
raise HTTPException(status_code=404, detail="Endpoint inconnu")
|
||||
|
||||
# If requesting a file that exists (and stays within dist), serve it
|
||||
file_path = (FRONTEND_DIST / full_path).resolve()
|
||||
if file_path.is_file() and file_path.is_relative_to(_dist_root):
|
||||
|
||||
Reference in New Issue
Block a user