From 06286401b7785589ce6ce1ebfe04d194cd20fd59 Mon Sep 17 00:00:00 2001 From: jingrow Date: Wed, 11 Mar 2026 17:14:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0api/v2=E7=AD=89=E5=90=8E?= =?UTF-8?q?=E7=AB=AFapi=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/jingrow/jingrow/api/v2.py | 47 ++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 apps/jingrow/jingrow/api/v2.py diff --git a/apps/jingrow/jingrow/api/v2.py b/apps/jingrow/jingrow/api/v2.py new file mode 100644 index 0000000..985d5dc --- /dev/null +++ b/apps/jingrow/jingrow/api/v2.py @@ -0,0 +1,47 @@ +# Copyright (c) 2025, JINGROW and contributors +# For license information, please see license.txt + +""" +API v2 路由 - 转发到 SaaS 端 +""" + +from fastapi import APIRouter, Request +from fastapi.responses import JSONResponse +import requests +import logging +from jingrow.config import Config +from jingrow.utils.auth import get_request_session_cookie + +logger = logging.getLogger(__name__) +router = APIRouter(prefix="/api/v2") + + +def _forward_to_saas(endpoint: str, params: dict = None) -> dict: + """通用转发函数""" + url = f"{Config.jingrow_server_url}/api/v2{endpoint}" + headers = {"Accept": "application/json", "Content-Type": "application/json"} + + session_cookie = get_request_session_cookie() + if session_cookie: + headers["Cookie"] = f"sid={session_cookie}" + + resp = requests.get(url, headers=headers, params=params, timeout=30) + if resp.status_code == 200: + return resp.json() + logger.error(f"[v2] SaaS error {endpoint}: {resp.status_code}") + return {} + + +@router.get("/pagetype/{pagetype}/meta") +async def get_meta(pagetype: str): + """获取 PageType 元数据 - 转发到 SaaS 端""" + result = _forward_to_saas(f"/pagetype/{pagetype}/meta") + return JSONResponse(content=result) + + +@router.get("/pagetype/{pagetype}/count") +async def get_count(pagetype: str, request: Request): + """获取 PageType 计数 - 转发到 SaaS 端""" + params = dict(request.query_params) + result = _forward_to_saas(f"/pagetype/{pagetype}/count", params) + return JSONResponse(content=result)