- 응답유형별 호출 주소 처리 로직 보완(GW/Mock 분리 대응) - Mock 응답 시 전체 URL 유지 및 Swagger 스펙 반영 logic 수정
This commit is contained in:
@@ -189,15 +189,23 @@
|
||||
|
||||
// 경로(op.path.value)에는 어댑터경로가 이미 baking 됨(백엔드 applyAutoRules). 서버에는 응답유형별 호스트만 붙인다.
|
||||
// - gw : djb.gateway.base-url (PortalProperty) → [gw호스트 + 어댑터경로 + 경로]
|
||||
// - mock : Mock Server URL → [mock호스트 + 어댑터경로 + 경로]
|
||||
// - mock : Mock Server URL(전체 URL) → [mock URL 그대로] (어댑터/오퍼레이션 경로 미부착)
|
||||
// - 그 외 : 호스트 없음 → [어댑터경로 + 경로]
|
||||
var _rt = (d.portal && d.portal.responseType) || 'sample';
|
||||
var _host;
|
||||
if (_rt === 'gw') _host = (window.DJB_CTX && window.DJB_CTX.gwAddress) || 'http://127.0.0.1:39310';
|
||||
else if (_rt === 'mock') _host = (d.portal && d.portal.mockUrl) || '';
|
||||
else _host = '';
|
||||
var _pathKey = op.path.value;
|
||||
if (_rt === 'gw') {
|
||||
_host = (window.DJB_CTX && window.DJB_CTX.gwAddress) || 'http://127.0.0.1:39310';
|
||||
} else if (_rt === 'mock') {
|
||||
// Mock 은 전체 호출 URL. origin=서버, pathname(+query)=경로로 분해해 경로가 뒤에 덧붙지 않도록 한다.
|
||||
var _mk = splitFullUrl((d.portal && d.portal.mockUrl) || '');
|
||||
_host = _mk.origin;
|
||||
_pathKey = _mk.path;
|
||||
} else {
|
||||
_host = '';
|
||||
}
|
||||
if (_host) spec.servers = [{ url: _host }];
|
||||
spec.paths[op.path.value] = { [op.method.value.toLowerCase()]: operation };
|
||||
spec.paths[_pathKey] = { [op.method.value.toLowerCase()]: operation };
|
||||
|
||||
// 보안 스킴
|
||||
d.securitySchemes.forEach(s => {
|
||||
@@ -946,14 +954,27 @@
|
||||
}
|
||||
}
|
||||
|
||||
// 응답유형별 실제 호출 주소. 경로(op.path.value)에 어댑터경로가 이미 포함, 호스트만 응답유형별로 앞에 붙임.
|
||||
// 전체 URL → { origin, path }. Mock Server URL 을 서버+경로로 분해(경로를 별도로 덧붙이지 않기 위함).
|
||||
function splitFullUrl(u) {
|
||||
u = (u || '').trim();
|
||||
if (!u) return { origin: '', path: '/' };
|
||||
try {
|
||||
var parsed = new URL(u);
|
||||
var path = (parsed.pathname || '/') + (parsed.search || '');
|
||||
if (!path || path.charAt(0) !== '/') path = '/' + path;
|
||||
return { origin: parsed.origin, path: path };
|
||||
} catch (e) {
|
||||
// 스킴 누락/파싱 실패 → 통째 origin 취급, path 는 '/'
|
||||
return { origin: u.replace(/\/+$/, ''), path: '/' };
|
||||
}
|
||||
}
|
||||
|
||||
// 응답유형별 실제 호출 주소. gw 는 [호스트 + 경로], mock 은 입력한 전체 URL 그대로(경로 미부착).
|
||||
function resolvedCallUrl() {
|
||||
var d = state.data;
|
||||
var rt = (d.portal && d.portal.responseType) || 'sample';
|
||||
var host;
|
||||
if (rt === 'gw') host = (window.DJB_CTX && window.DJB_CTX.gwAddress) || 'http://127.0.0.1:39310';
|
||||
else if (rt === 'mock') host = (d.portal && d.portal.mockUrl) || '';
|
||||
else host = '';
|
||||
if (rt === 'mock') return (((d.portal && d.portal.mockUrl) || '').trim()) || '(주소 없음)';
|
||||
var host = (rt === 'gw') ? ((window.DJB_CTX && window.DJB_CTX.gwAddress) || 'http://127.0.0.1:39310') : '';
|
||||
var path = (d.operation && d.operation.path && d.operation.path.value) || '';
|
||||
if (!host) return path || '(주소 없음)';
|
||||
return host.replace(/\/+$/, '') + (path.charAt(0) === '/' ? path : '/' + path);
|
||||
@@ -1012,7 +1033,7 @@
|
||||
: `<div class="mt-2 text-xs text-slate-500">실제 호출 주소: <code id="resolved-call-url" class="font-mono text-slate-700 break-all">${escapeHtml(resolvedCallUrl())}</code></div>`) +
|
||||
(rt === 'gw' ? `<div class="mt-1 text-xs text-slate-400">GW 주소는 포탈 설정(PTL_PROPERTY, 그룹 Portal)의 <code class="font-mono">djb.gateway.base-url</code> 값을 사용합니다.</div>` : '') +
|
||||
'</div>') +
|
||||
(rt === 'mock' ? fieldRow('Mock Server URL', input(p.mockUrl || '', 'data-portal="mockUrl"', { placeholder: 'https://mock.example.com' }), { hint: 'Mock 응답을 제공할 서버의 기본 URL. 응답 유형이 Mock 일 때 개발자포탈이 이 주소로 요청을 전달하고, Swagger 스펙의 서버 주소로도 사용됩니다.' }) : '')
|
||||
(rt === 'mock' ? fieldRow('Mock Server URL', input(p.mockUrl || '', 'data-portal="mockUrl"', { placeholder: 'https://mock.example.com/api/v1/foo' }), { hint: 'Mock 응답을 제공할 전체 호출 URL(경로 포함). 응답 유형이 Mock 일 때 이 주소로 그대로 호출하며, 어댑터/오퍼레이션 경로를 뒤에 덧붙이지 않습니다.' }) : '')
|
||||
) +
|
||||
card(
|
||||
sectionTitle('설명 (API 소개 페이지)', 'API 소개 페이지에만 표시됩니다. OpenAPI 스펙 파일에는 포함되지 않습니다.') +
|
||||
|
||||
Reference in New Issue
Block a user