v0.5.7: openapi.json кешируется в памяти — 33KB без перегенерации на каждый запрос
This commit is contained in:
@@ -80,7 +80,7 @@ SERVICES = _DF["SERVICES"]
|
||||
OPS_INDEX = _DF["OPS_INDEX"]
|
||||
|
||||
DELAY = float(os.getenv("MOCK_OP_DELAY", "0.1"))
|
||||
VERSION = "0.5.6"
|
||||
VERSION = "0.5.7"
|
||||
|
||||
|
||||
def get_services(stand_id):
|
||||
|
||||
@@ -19,6 +19,9 @@ bp = Blueprint("openapi", __name__, url_prefix="/api/v1/svc")
|
||||
# URL для сервера — из env или автоопределение
|
||||
_SERVER_URL = os.getenv("POLYGON_ENDPOINT", "https://polygon.pythonk8s.dev.nubes.ru")
|
||||
|
||||
# Кеш спеки — генерится один раз, не на каждый запрос
|
||||
_SPEC_CACHE = None
|
||||
|
||||
|
||||
def _build_servers():
|
||||
"""Список серверов — по одному на каждый стенд."""
|
||||
@@ -33,12 +36,11 @@ def _build_servers():
|
||||
|
||||
@bp.route("/openapi.json", methods=["GET"])
|
||||
def openapi_spec():
|
||||
"""GET /api/v1/svc/openapi.json — OpenAPI 3.1.0 спецификация.
|
||||
|
||||
Возвращает полную спецификацию всех эндпоинтов полигона.
|
||||
Динамически добавляет схемы параметров для каждого загруженного сервиса.
|
||||
"""
|
||||
return jsonify(_build_spec())
|
||||
"""GET /api/v1/svc/openapi.json — OpenAPI 3.1.0 спецификация (кешируется)."""
|
||||
global _SPEC_CACHE
|
||||
if _SPEC_CACHE is None:
|
||||
_SPEC_CACHE = _build_spec()
|
||||
return jsonify(_SPEC_CACHE)
|
||||
|
||||
|
||||
def _build_spec():
|
||||
|
||||
+1
-1
@@ -371,7 +371,7 @@ def test_stands_isolated():
|
||||
t("Изоляция: каждый стенд — свои инстансы", test_stands_isolated)
|
||||
|
||||
def test_stands_openapi():
|
||||
r = requests.get(f"{BASE}/api/v1/svc/openapi.json")
|
||||
r = requests.get(f"{BASE}/api/v1/svc/openapi.json", timeout=30)
|
||||
spec = js(r)
|
||||
servers = [s["url"] for s in spec["servers"]]
|
||||
assert len(servers) == 3, f"expected 3 servers, got {len(servers)}"
|
||||
|
||||
Reference in New Issue
Block a user