123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- <%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
- <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <script type="text/javascript" src="<c:url value='/resources/js/admin/api.js' />"></script>
- <!-- API 관리 -->
- <div class="main-wrapper">
- <div class="k-header title-bar">
- <span class="k-icon k-i-group"></span><span class="title">API 관리</span>
- <span class="category"></span>
- </div>
- <div id="wrapper">
- <div class="left-pane">
- <div data-role="buttongroup">
- <button type="button" class="k-button" id="add-item">노드추가</button>
- <button type="button" class="k-button" id="remove-item">노드삭제</button>
- <button type="button" class="k-button" id="deselect-item">선택해제</button>
- </div>
- <div id="tree-view" class="k-content"></div>
- </div>
- <div class="right-pane" style="display: none;">
- <div style="padding: 10px;">
- <button type="button" class="k-button" id="save-item">저장</button>
- <button type="button" class="k-button" id="reload-item">캐시 초기화</button>
- </div>
- <div class="edit-view" class="k-content">
- <table style="width: 740px; margin: 0 auto;">
- <tbody>
- <tr>
- <th class="k-header"><span>아이디</span></th>
- <td class="k-content"><input class="k-textbox wid100" disabled="disabled" data-bind="value:id" placeholder="아이디 자동 생성" /></td>
- <th class="k-header"><span>이름</span></th>
- <td class="k-content"><input class="k-textbox wid100" data-bind="value:name" /></td>
- </tr>
- <tr>
- <th class="k-header"><span>API URI</span></th>
- <td class="k-content" colspan="3"><span id="categoryPaths" data-bind="text:data.catPathName"></span> <input class="k-textbox"
- data-bind="value:data.reqUrlAddr" style="width: 223px;" placeholder="특수문자를 제외한 문자와 숫자 조합"></td>
- </tr>
- <tr>
- <th class="k-header"><span>API 타입</span></th>
- <td class="k-content">
- <select id="apiType" data-bind="value:data.apiType" style="width: 70%;">
- <c:forEach var="item" items="${apiTypes}">
- <option value="${item}">${item}</option>
- </c:forEach>
- </select>
- <span class="k-button apiTypeHelp">도움말</span>
- </td>
- <th class="k-header"><span>연산유형</span></th>
- <td class="k-content">
- <select id="httpMethodType" data-bind="value:data.httpMethodType" style="width: 100%;">
- <option value="">==선택==</option>
- <c:forEach var="item" items="${httpMethodTypes}">
- <option value="${item}">${item}
- <%-- (${item.value}) --%></option>
- </c:forEach>
- </select>
- </td>
- </tr>
- <tr>
- <th class="k-header"><span>응답결과 타입</span></th>
- <td class="k-content">
- <select id="resultType" data-bind="value:data.resultType" style="width: 100%;">
- <option value="">==선택==</option>
- <c:forEach var="item" items="${resultTypes}">
- <option value="${item}">${item}</option>
- </c:forEach>
- </select>
- </td>
- <th class="k-header"><span>데이터소스</span></th>
- <td class="k-content">
- <select id="dataSourceName" data-bind="value:data.dataSourceName" style="width: 100%;">
- <option value="">==선택==</option>
- <c:forEach var="item" items="${dataSourceNames}">
- <option value="${item}">${item}</option>
- </c:forEach>
- </select>
- </td>
- </tr>
- <tr id="ws-row" style="display: none;">
- <th class="k-header"><span>웹서비스 요청</span></th>
- <td class="k-content" colspan="3">
- <div>
- <table>
- <colgroup>
- <col width="24%" />
- <col width="76%" />
- </colgroup>
- <tbody>
- <tr>
- <th class="k-header"><span>URL</span></th>
- <td class="k-content"><textarea class="k-textbox" data-bind="value:data.targetUrlAddr" style="width: 100%;height: 100px;"></textarea></td>
- </tr>
- <tr>
- <th class="k-header"><span>헤더 정보</span></th>
- <td class="k-content" style="padding: 0;">
- <div id="wsHeaders"></div>
- </td>
- </tr>
- </tbody>
- </table>
- </div>
- </td>
- </tr>
- <tr id="query-row">
- <th class="k-header"><span>SQL</span></th>
- <td class="k-content" colspan="3"><textarea id="queryMsg" data-bind="value:data.queryMsg" style="width: 100%; height: 100px;"></textarea></td>
- </tr>
- <tr id="procd-row" style="display: none;">
- <th class="k-header">Procedure</th>
- <td class="k-content" colspan="3"><input class="k-textbox wid100" data-bind="value:data.targetName"></td>
- </tr>
- <tr>
- <th class="k-header">파라미터</th>
- <td class="k-content" colspan="3">
- <div id="reqParams"></div>
- </td>
- </tr>
- <tr>
- <th class="k-header">결과샘플</th>
- <td class="k-content" colspan="3">
- <textarea id="resSampleCl" data-bind="value:data.resSampleCl" style="width: 100%; height: 100px;"></textarea>
- </td>
- </tr>
- <tr>
- <th class="k-header">설명<br/>(<span id="descLength">0</span>/<span>500bytes</span>)</th>
- <td class="k-content" colspan="3"><textarea id="apiDesc" data-bind="value:data.apiDesc" style="width: 100%; height: 100px;"></textarea></td>
- </tr>
- <tr>
- <th class="k-header">최초 생성일</th>
- <td class="k-content"><span data-bind="text:getCreateDate"></span></td>
- <th class="k-header">최초 생성자</th>
- <td class="k-content"><span data-bind="text:data.createId"></span></td>
- </tr>
- <tr>
- <th class="k-header">최종 변경일</th>
- <td class="k-content"><span data-bind="text:getUpdateDate"></span></td>
- <th class="k-header">최종 변경자</th>
- <td class="k-content"><span data-bind="text:data.updateId"></span></td>
- </tr>
- </tbody>
- </table>
- </div>
- <!-- 도움말 -->
- <div id="helpContents" style="display:none;">
- <blockquote>
- <ul style="list-style:none;padding:0;margin:0;">
- <li style="padding:15px 0;line-height: 1.5em;">
- <strong>* webservice *</strong>
- <br/>
- 응답결과는 요청헤더의 Content-Type, Accept 순으로 확인해서 마지막으로 만나는 것이 최종 응답유형이된다.
- 예를들어 Content-Type이 XML이고, Accept는 JSON이라면 최종적으로 JSON이 응답유형이 된다. <br/><br/>
- 이 응답 유형이 JSON인 경우에 한해서 응답결과타입(MAP, LIST, INT)이 유효한데, INT는 사용되지 않는다. <br/><br/>
- 응답결과는 XML, JSON, URL-ENCODE가 준비되어 있으며 이외의 경우에는 Map에 key를 text로 하여 응답결과를 붙여서 반환한다.
- 응답결과가 XML이면 JSON객체로 반환한다. <br/><br/>
- 응답결과가 JSON이고, 응답결과타입이 LIST인 경우 리턴타입은 List<Map<String, Object>> 이다. <br/>
- 응답결과가 JSON이고, 응답결과타입이 MAP인 경우 리턴타입은 Map<String, Object>이다. <br/>
- URL-ENCODE의 경우 리턴타입은 MultiValueMap<String, String> 이다. <br/>
- </li>
- <li style="padding:15px 0;line-height: 1.5em;">
- <strong>* sql *</strong>
- <br/>
- HttpMethod타입에 따라서 질의문이 실행되는데 HttpMethod타입이 GET인 경우와 그렇지 않은 경우로 분류된다. <br/>
- GET인 경우 응답결과타입이 MAP인 경우, queryForMap형태로 질의문이 실행된다. 즉, 결과가 1개인 SELECT문이 적합하다. <br/>
- LIST인 경우에는 queryForList형태로 질의문이 실행되므로, 결과가 2개 이상인 SELECT문에 적합하다. INT는 부적절한 응답결과타입이다. <br/><br/>
- HttpMethod타입이 GET이 아닌경우, INT가 아니면 부적절한 응답결과 타입이며 질의문은 INSERT, UPDATE, DELETE문이 적합한다. 반환되는 값은 해당 질의문에 의해 영향받은 row의 갯수이다.
- </li>
- <li style="padding:15px 0;line-height: 1.5em;">
- <strong>* procedure *</strong>
- <br/>
- Procedure 입력란(Api.targetName) 작성이 필요한다. 지정하는 형태는 다음과 같다.<br/>
- (1) {procedure name}<br/>
- (2) {schema name}.{procedure name}<br/>
- (3) {schema name}.{catalog name}.{procedure name}<br/>
- 이외의 경우는 부적절한 형태이다.
- 실행결과는 응답결과타입에 상관없이 Map<String, Object>이다.
- </li>
- <li style="padding:15px 0;line-height: 1.5em;">
- <strong>* myBatis *</strong>
- <br/>
-
- </li>
- </ul>
- </blockquote>
- </div>
- </div>
- </div>
- </div>
- <div style="display: none;">
- <select data-id="reqParamTypeDropDownEditor">
- <c:forEach var="item" items="${reqParamTypes}">
- <option value="${item}">${item}</option>
- </c:forEach>
- </select>
- <select data-id="wsHeaderTypeDropDownEditor">
- <c:forEach var="item" items="${wsHeaderTypes}">
- <option value="${item.value}">${item.value}</option>
- </c:forEach>
- </select>
- </div>
- <script type="text/javascript">
- $(document).ready(function() {
- var api = new mcare_admin_api();
- api.init();
- });
- </script>
|