Next 15 перевернул default caching для GET; plus Web standard Response вместо Node req/res.
Разбор
- Next 15: GET caching off by default. В 14 «работало» cached — в 15 dynamic. Знайте
dynamic = 'force-static' для opt-in.
route.ts и page.tsx не coexist в одном segment. Folder — либо page, либо endpoint.
- Web standard, не Node. Нет
res.json() — return Response. Pages Router habit res.status(200).send() — не существует.
- CORS не automatic.
Access-Control-* сами (или middleware) + explicit OPTIONS preflight.
- «Internal API» anti-pattern.
/api/products чтобы server component fetch — double latency. DB напрямую в component; endpoint только для outside callers.
params async в Next 15 — second argument { params } — Promise.
Итог
Route handlers — Web Request/Response на edge app; internal fetch из своих RSC — anti-pattern.