api.jsp 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. <%@page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
  3. <script type="text/javascript" src="<c:url value='/resources/js/admin/api.js' />"></script>
  4. <!-- API 관리 -->
  5. <div class="main-wrapper">
  6. <div class="k-header title-bar">
  7. <span class="k-icon k-i-group"></span><span class="title">API 관리</span>
  8. <span class="category"></span>
  9. </div>
  10. <div id="wrapper">
  11. <div class="left-pane">
  12. <div data-role="buttongroup">
  13. <button type="button" class="k-button" id="add-item">노드추가</button>
  14. <button type="button" class="k-button" id="remove-item">노드삭제</button>
  15. <button type="button" class="k-button" id="deselect-item">선택해제</button>
  16. </div>
  17. <div id="tree-view" class="k-content"></div>
  18. </div>
  19. <div class="right-pane" style="display: none;">
  20. <div style="padding: 10px;">
  21. <button type="button" class="k-button" id="save-item">저장</button>
  22. <button type="button" class="k-button" id="reload-item">캐시 초기화</button>
  23. </div>
  24. <div class="edit-view" class="k-content">
  25. <table style="width: 740px; margin: 0 auto;">
  26. <tbody>
  27. <tr>
  28. <th class="k-header"><span>아이디</span></th>
  29. <td class="k-content"><input class="k-textbox wid100" disabled="disabled" data-bind="value:id" placeholder="아이디 자동 생성" /></td>
  30. <th class="k-header"><span>이름</span></th>
  31. <td class="k-content"><input class="k-textbox wid100" data-bind="value:name" /></td>
  32. </tr>
  33. <tr>
  34. <th class="k-header"><span>API URI</span></th>
  35. <td class="k-content" colspan="3"><span id="categoryPaths" data-bind="text:data.catPathName"></span> <input class="k-textbox"
  36. data-bind="value:data.reqUrlAddr" style="width: 223px;" placeholder="특수문자를 제외한 문자와 숫자 조합"></td>
  37. </tr>
  38. <tr>
  39. <th class="k-header"><span>API 타입</span></th>
  40. <td class="k-content">
  41. <select id="apiType" data-bind="value:data.apiType" style="width: 70%;">
  42. <c:forEach var="item" items="${apiTypes}">
  43. <option value="${item}">${item}</option>
  44. </c:forEach>
  45. </select>
  46. <span class="k-button apiTypeHelp">도움말</span>
  47. </td>
  48. <th class="k-header"><span>연산유형</span></th>
  49. <td class="k-content">
  50. <select id="httpMethodType" data-bind="value:data.httpMethodType" style="width: 100%;">
  51. <option value="">==선택==</option>
  52. <c:forEach var="item" items="${httpMethodTypes}">
  53. <option value="${item}">${item}
  54. <%-- (${item.value}) --%></option>
  55. </c:forEach>
  56. </select>
  57. </td>
  58. </tr>
  59. <tr>
  60. <th class="k-header"><span>응답결과 타입</span></th>
  61. <td class="k-content">
  62. <select id="resultType" data-bind="value:data.resultType" style="width: 100%;">
  63. <option value="">==선택==</option>
  64. <c:forEach var="item" items="${resultTypes}">
  65. <option value="${item}">${item}</option>
  66. </c:forEach>
  67. </select>
  68. </td>
  69. <th class="k-header"><span>데이터소스</span></th>
  70. <td class="k-content">
  71. <select id="dataSourceName" data-bind="value:data.dataSourceName" style="width: 100%;">
  72. <option value="">==선택==</option>
  73. <c:forEach var="item" items="${dataSourceNames}">
  74. <option value="${item}">${item}</option>
  75. </c:forEach>
  76. </select>
  77. </td>
  78. </tr>
  79. <tr id="ws-row" style="display: none;">
  80. <th class="k-header"><span>웹서비스 요청</span></th>
  81. <td class="k-content" colspan="3">
  82. <div>
  83. <table>
  84. <colgroup>
  85. <col width="24%" />
  86. <col width="76%" />
  87. </colgroup>
  88. <tbody>
  89. <tr>
  90. <th class="k-header"><span>URL</span></th>
  91. <td class="k-content"><textarea class="k-textbox" data-bind="value:data.targetUrlAddr" style="width: 100%;height: 100px;"></textarea></td>
  92. </tr>
  93. <tr>
  94. <th class="k-header"><span>헤더 정보</span></th>
  95. <td class="k-content" style="padding: 0;">
  96. <div id="wsHeaders"></div>
  97. </td>
  98. </tr>
  99. </tbody>
  100. </table>
  101. </div>
  102. </td>
  103. </tr>
  104. <tr id="query-row">
  105. <th class="k-header"><span>SQL</span></th>
  106. <td class="k-content" colspan="3"><textarea id="queryMsg" data-bind="value:data.queryMsg" style="width: 100%; height: 100px;"></textarea></td>
  107. </tr>
  108. <tr id="procd-row" style="display: none;">
  109. <th class="k-header">Procedure</th>
  110. <td class="k-content" colspan="3"><input class="k-textbox wid100" data-bind="value:data.targetName"></td>
  111. </tr>
  112. <tr>
  113. <th class="k-header">파라미터</th>
  114. <td class="k-content" colspan="3">
  115. <div id="reqParams"></div>
  116. </td>
  117. </tr>
  118. <tr>
  119. <th class="k-header">결과샘플</th>
  120. <td class="k-content" colspan="3">
  121. <textarea id="resSampleCl" data-bind="value:data.resSampleCl" style="width: 100%; height: 100px;"></textarea>
  122. </td>
  123. </tr>
  124. <tr>
  125. <th class="k-header">설명<br/>(<span id="descLength">0</span>/<span>500bytes</span>)</th>
  126. <td class="k-content" colspan="3"><textarea id="apiDesc" data-bind="value:data.apiDesc" style="width: 100%; height: 100px;"></textarea></td>
  127. </tr>
  128. <tr>
  129. <th class="k-header">최초 생성일</th>
  130. <td class="k-content"><span data-bind="text:getCreateDate"></span></td>
  131. <th class="k-header">최초 생성자</th>
  132. <td class="k-content"><span data-bind="text:data.createId"></span></td>
  133. </tr>
  134. <tr>
  135. <th class="k-header">최종 변경일</th>
  136. <td class="k-content"><span data-bind="text:getUpdateDate"></span></td>
  137. <th class="k-header">최종 변경자</th>
  138. <td class="k-content"><span data-bind="text:data.updateId"></span></td>
  139. </tr>
  140. </tbody>
  141. </table>
  142. </div>
  143. <!-- 도움말 -->
  144. <div id="helpContents" style="display:none;">
  145. <blockquote>
  146. <ul style="list-style:none;padding:0;margin:0;">
  147. <li style="padding:15px 0;line-height: 1.5em;">
  148. <strong>* webservice *</strong>
  149. <br/>
  150. &nbsp;응답결과는 요청헤더의 Content-Type, Accept 순으로 확인해서 마지막으로 만나는 것이 최종 응답유형이된다.
  151. 예를들어 Content-Type이 XML이고, Accept는 JSON이라면 최종적으로 JSON이 응답유형이 된다. <br/><br/>
  152. 이 응답 유형이 JSON인 경우에 한해서 응답결과타입(MAP, LIST, INT)이 유효한데, INT는 사용되지 않는다. <br/><br/>
  153. 응답결과는 XML, JSON, URL-ENCODE가 준비되어 있으며 이외의 경우에는 Map에 key를 text로 하여 응답결과를 붙여서 반환한다.
  154. 응답결과가 XML이면 JSON객체로 반환한다. <br/><br/>
  155. 응답결과가 JSON이고, 응답결과타입이 LIST인 경우 리턴타입은 List&lt;Map&lt;String, Object&gt;&gt; 이다. <br/>
  156. 응답결과가 JSON이고, 응답결과타입이 MAP인 경우 리턴타입은 Map&lt;String, Object&gt;이다. <br/>
  157. URL-ENCODE의 경우 리턴타입은 MultiValueMap&lt;String, String&gt; 이다. <br/>
  158. </li>
  159. <li style="padding:15px 0;line-height: 1.5em;">
  160. <strong>* sql *</strong>
  161. <br/>
  162. &nbsp;HttpMethod타입에 따라서 질의문이 실행되는데 HttpMethod타입이 GET인 경우와 그렇지 않은 경우로 분류된다. <br/>
  163. GET인 경우 응답결과타입이 MAP인 경우, queryForMap형태로 질의문이 실행된다. 즉, 결과가 1개인 SELECT문이 적합하다. <br/>
  164. LIST인 경우에는 queryForList형태로 질의문이 실행되므로, 결과가 2개 이상인 SELECT문에 적합하다. INT는 부적절한 응답결과타입이다. <br/><br/>
  165. HttpMethod타입이 GET이 아닌경우, INT가 아니면 부적절한 응답결과 타입이며 질의문은 INSERT, UPDATE, DELETE문이 적합한다. 반환되는 값은 해당 질의문에 의해 영향받은 row의 갯수이다.
  166. </li>
  167. <li style="padding:15px 0;line-height: 1.5em;">
  168. <strong>* procedure *</strong>
  169. <br/>
  170. &nbsp;Procedure 입력란(Api.targetName) 작성이 필요한다. 지정하는 형태는 다음과 같다.<br/>
  171. (1) {procedure name}<br/>
  172. (2) {schema name}.{procedure name}<br/>
  173. (3) {schema name}.{catalog name}.{procedure name}<br/>
  174. 이외의 경우는 부적절한 형태이다.
  175. 실행결과는 응답결과타입에 상관없이 Map&lt;String, Object&gt;이다.
  176. </li>
  177. <li style="padding:15px 0;line-height: 1.5em;">
  178. <strong>* myBatis *</strong>
  179. <br/>
  180. &nbsp;
  181. </li>
  182. </ul>
  183. </blockquote>
  184. </div>
  185. </div>
  186. </div>
  187. </div>
  188. <div style="display: none;">
  189. <select data-id="reqParamTypeDropDownEditor">
  190. <c:forEach var="item" items="${reqParamTypes}">
  191. <option value="${item}">${item}</option>
  192. </c:forEach>
  193. </select>
  194. <select data-id="wsHeaderTypeDropDownEditor">
  195. <c:forEach var="item" items="${wsHeaderTypes}">
  196. <option value="${item.value}">${item.value}</option>
  197. </c:forEach>
  198. </select>
  199. </div>
  200. <script type="text/javascript">
  201. $(document).ready(function() {
  202. var api = new mcare_admin_api();
  203. api.init();
  204. });
  205. </script>