"SwaggerUI - 실행 전 응답 UI 노출 방지 로직 추가

- Execute 클릭 여부 확인 pendingExecute 플래그 도입
- 네트워크 에러/응답 처리 시 플래그 초기화 추가"
This commit is contained in:
Rinjae
2026-07-24 09:44:28 +09:00
parent a2878f9cee
commit 9981459691
@@ -26,6 +26,9 @@
var startTs = 0; var startTs = 0;
var targetOpblock = null; var targetOpblock = null;
// Execute 클릭 후에만 true. spec 로딩 등 실행 외 응답이 responseInterceptor 로
// 들어와도 그리드를 만들지 않기 위한 게이트 (실행 전 UI 미노출 보장).
var pendingExecute = false;
function now() { function now() {
return (global.performance && performance.now) ? performance.now() : Date.now(); return (global.performance && performance.now) ? performance.now() : Date.now();
@@ -206,6 +209,7 @@
// 네트워크/CORS 실패 렌더: responseInterceptor 로 오지 않고 store 에만 error 로 남는 케이스. // 네트워크/CORS 실패 렌더: responseInterceptor 로 오지 않고 store 에만 error 로 남는 케이스.
function renderNetworkError(msg) { function renderNetworkError(msg) {
pendingExecute = false;
var grid = gridFor(targetOpblock); var grid = gridFor(targetOpblock);
if (!grid) return; if (!grid) return;
grid.classList.remove("djb-empty"); grid.classList.remove("djb-empty");
@@ -250,6 +254,7 @@
} }
startTs = now(); startTs = now();
pendingExecute = true;
var grid = gridFor(targetOpblock); var grid = gridFor(targetOpblock);
if (grid) { if (grid) {
grid.classList.add("djb-empty"); grid.classList.add("djb-empty");
@@ -264,10 +269,13 @@
*/ */
function renderResponse(res) { function renderResponse(res) {
if (!res) return; if (!res) return;
// spec 로딩 응답(/…/swagger.json)은 responseInterceptor 로도 들어온다. 이때 렌더하면 // Execute 를 누른 적 없으면 무시 — spec 로딩(/…/swagger.json) 응답도
// 실행 전인데 응답 본문에 OpenAPI spec 이 그려지므로 무시한다. 사용자 API 호출은 // responseInterceptor 로 들어오는데, 이때 렌더하면 실행 전 응답 본문에
// 프록시(/api/call-api)로 나가므로 url 에 swagger.json 이 없다. // OpenAPI spec 이 그려진다. url 검사는 버전에 따라 res.url 이 비어 무력화될
// 수 있어 실행 게이트를 1차 방어로 둔다.
if (!pendingExecute) return;
if (res.url && res.url.indexOf("swagger.json") !== -1) return; if (res.url && res.url.indexOf("swagger.json") !== -1) return;
pendingExecute = false;
var ms = Math.max(0, Math.round(now() - startTs)); var ms = Math.max(0, Math.round(now() - startTs));
var status = res.status || 0; var status = res.status || 0;
var statusText = res.statusText || ""; var statusText = res.statusText || "";