ImportModule.class.php 61 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120
  1. <?php
  2. /**
  3. * @name eolinker ams open source,eolinker开源版本
  4. * @link https://www.eolinker.com/
  5. * @package eolinker
  6. * @author www.eolinker.com 广州银云信息科技有限公司 ©2015-2018
  7. * eoLinker是目前全球领先、国内最大的在线API接口管理平台,提供自动生成API文档、API自动化测试、Mock测试、团队协作等功能,旨在解决由于前后端分离导致的开发效率低下问题。
  8. * 如在使用的过程中有任何问题,欢迎加入用户讨论群进行反馈,我们将会以最快的速度,最好的服务态度为您解决问题。
  9. *
  10. * eoLinker AMS开源版的开源协议遵循Apache License 2.0,如需获取最新的eolinker开源版以及相关资讯,请访问:https://www.eolinker.com/#/os/download
  11. *
  12. * 官方网站:https://www.eolinker.com/
  13. * 官方博客以及社区:http://blog.eolinker.com/
  14. * 使用教程以及帮助:http://help.eolinker.com/
  15. * 商务合作邮箱:market@eolinker.com
  16. * 用户讨论QQ群:284421832
  17. */
  18. class ImportModule
  19. {
  20. function __construct()
  21. {
  22. @session_start();
  23. }
  24. /**
  25. * 导入eolinker导出的Json格式数据
  26. * @param $data string 从eolinker导出的Json格式数据
  27. * @return bool
  28. */
  29. public function eoapiImport(&$data)
  30. {
  31. $dao = new ImportDao;
  32. return $dao->importEoapi($data, $_SESSION['userID']);
  33. }
  34. /**
  35. * 导入DHC
  36. * @param $data string 从DHC导出的Json格式数据
  37. * @return bool
  38. */
  39. public function importDHC(&$data)
  40. {
  41. try {
  42. $projectInfo = array('projectName' => $data['nodes'][0]['name'], 'projectType' => 0, 'projectVersion' => 1.0);
  43. //生成分组信息
  44. $groupInfoList[] = array('groupName' => 'DHC导入', 'id' => $data['nodes'][0]['id']);
  45. if (is_array($data['nodes'])) {
  46. foreach ($data['nodes'] as $element) {
  47. if ($element['type'] == 'Service') {
  48. $groupInfoList[] = array('groupName' => $element['name'], 'id' => $element['id']);
  49. }
  50. }
  51. }
  52. if (is_array($groupInfoList)) {
  53. foreach ($groupInfoList as &$groupInfo) {
  54. $apiList = array();
  55. if (is_array($data['nodes'])) {
  56. foreach ($data['nodes'] as $element) {
  57. if ($element['type'] != 'Request' || $element['parentId'] != $groupInfo['id']) {
  58. continue;
  59. }
  60. $apiInfo['baseInfo']['apiName'] = $element['name'];
  61. $apiInfo['baseInfo']['apiURI'] = $element['uri']['path'];
  62. $apiInfo['baseInfo']['apiProtocol'] = ($element['uri']['scheme']['name'] == 'http') ? 0 : 1;
  63. $apiInfo['baseInfo']['apiStatus'] = 0;
  64. $apiInfo['baseInfo']['starred'] = 0;
  65. $apiInfo['baseInfo']['apiSuccessMock'] = '';
  66. $apiInfo['baseInfo']['apiFailureMock'] = '';
  67. $apiInfo['baseInfo']['apiRequestParamType'] = 0;
  68. $apiInfo['baseInfo']['apiRequestRaw'] = '';
  69. $apiInfo['baseInfo']['apiNoteType'] = 0;
  70. $apiInfo['baseInfo']['apiNote'] = '';
  71. $apiInfo['baseInfo']['apiNoteRaw'] = '';
  72. $apiInfo['baseInfo']['apiUpdateTime'] = date("Y-m-d H:i:s", time());
  73. switch ($element['method']['name']) {
  74. case 'POST' :
  75. $apiInfo['baseInfo']['apiRequestType'] = 0;
  76. break;
  77. case 'GET' :
  78. $apiInfo['baseInfo']['apiRequestType'] = 1;
  79. break;
  80. case 'PUT' :
  81. $apiInfo['baseInfo']['apiRequestType'] = 2;
  82. break;
  83. case 'DELETE' :
  84. $apiInfo['baseInfo']['apiRequestType'] = 3;
  85. break;
  86. case 'HEAD' :
  87. $apiInfo['baseInfo']['apiRequestType'] = 4;
  88. break;
  89. case 'OPTIONS' :
  90. $apiInfo['baseInfo']['apiRequestType'] = 5;
  91. break;
  92. case 'PATCH' :
  93. $apiInfo['baseInfo']['apiRequestType'] = 6;
  94. break;
  95. }
  96. $headerInfo = array();
  97. if (is_array($element['headers'])) {
  98. foreach ($element['headers'] as $header) {
  99. $headerInfo[] = array('headerName' => $header['name'], 'headerValue' => $header['value']);
  100. }
  101. }
  102. $apiInfo['headerInfo'] = $headerInfo;
  103. unset($headerInfo);
  104. $apiRequestParam = array();
  105. if ($element['method']['requestBody']) {
  106. $items = $element['body']['formBody']['items'];
  107. if (is_array($items)) {
  108. foreach ($items as $item) {
  109. $param['paramKey'] = $item['name'];
  110. $param['paramValue'] = $item['value'];
  111. $param['paramType'] = ($item['type'] == 'Text') ? 0 : 1;
  112. $param['paramNotNull'] = $item['enabled'] ? 0 : 1;
  113. $param['paramName'] = '';
  114. $param['paramLimit'] = '';
  115. $param['paramValueList'] = array();
  116. $apiRequestParam[] = $param;
  117. unset($param);
  118. }
  119. }
  120. }
  121. $apiInfo['requestInfo'] = $apiRequestParam;
  122. unset($apiRequestParam);
  123. $apiInfo['resultInfo'] = array();
  124. $apiList[] = $apiInfo;
  125. unset($apiInfo);
  126. }
  127. }
  128. $groupInfo['apiList'] = $apiList;
  129. unset($apiList);
  130. }
  131. }
  132. $dao = new ImportDao;
  133. return $dao->importOther($projectInfo, $groupInfoList, $_SESSION['userID']);
  134. } catch (\PDOException $e) {
  135. return FALSE;
  136. }
  137. }
  138. /**
  139. * 导入V1版本postman
  140. * @param $data string 从Postman V1版本导出的Json格式数据
  141. * @return bool
  142. */
  143. public function importPostmanV1(&$data)
  144. {
  145. try {
  146. $projectInfo = array('projectName' => $data['name'], 'projectType' => 0, 'projectVersion' => 1.0);
  147. $groupInfoList[] = array('groupName' => '默认分组', 'folderID' => 'default');
  148. if (is_array($data['folders'])) {
  149. foreach ($data['folders'] as $folder) {
  150. $groupInfoList[] = array('groupName' => $folder['name'], 'folderID' => $folder['id']);
  151. }
  152. }
  153. if (is_array($groupInfoList)) {
  154. foreach ($groupInfoList as &$groupInfo) {
  155. $apiList = array();
  156. if (is_array($data['requests'])) {
  157. foreach ($data['requests'] as $request) {
  158. if (empty($request['folder'])) {
  159. $request['folder'] = 'default';
  160. }
  161. if ($request['folder'] != $groupInfo['folderID']) {
  162. continue;
  163. }
  164. $apiInfo['baseInfo']['apiName'] = $request['name'];
  165. $apiInfo['baseInfo']['apiURI'] = $request['url'];
  166. $apiInfo['baseInfo']['apiProtocol'] = (strpos($request['url'], 'https') !== 0) ? 0 : 1;
  167. $apiInfo['baseInfo']['apiStatus'] = 0;
  168. $apiInfo['baseInfo']['starred'] = 0;
  169. $apiInfo['baseInfo']['apiSuccessMock'] = '';
  170. $apiInfo['baseInfo']['apiFailureMock'] = '';
  171. $apiInfo['baseInfo']['apiRequestParamType'] = 0;
  172. $apiInfo['baseInfo']['apiRequestRaw'] = '';
  173. $apiInfo['baseInfo']['apiNoteType'] = 0;
  174. $apiInfo['baseInfo']['apiNote'] = '';
  175. $apiInfo['baseInfo']['apiNoteRaw'] = '';
  176. $apiInfo['baseInfo']['apiUpdateTime'] = date("Y-m-d H:i:s", time());
  177. switch ($request['method']) {
  178. case 'POST' :
  179. $apiInfo['baseInfo']['apiRequestType'] = 0;
  180. break;
  181. case 'GET' :
  182. $apiInfo['baseInfo']['apiRequestType'] = 1;
  183. break;
  184. case 'PUT' :
  185. $apiInfo['baseInfo']['apiRequestType'] = 2;
  186. break;
  187. case 'DELETE' :
  188. $apiInfo['baseInfo']['apiRequestType'] = 3;
  189. break;
  190. case 'HEAD' :
  191. $apiInfo['baseInfo']['apiRequestType'] = 4;
  192. break;
  193. case 'OPTIONS' :
  194. $apiInfo['baseInfo']['apiRequestType'] = 5;
  195. break;
  196. case 'PATCH' :
  197. $apiInfo['baseInfo']['apiRequestType'] = 6;
  198. break;
  199. }
  200. $headerInfo = array();
  201. $header_rows = array_filter(explode(chr(10), $request['headers']), "trim");
  202. if (is_array($header_rows)) {
  203. foreach ($header_rows as $row) {
  204. $keylen = strpos($row, ':');
  205. if ($keylen) {
  206. $headerInfo[] = array('headerName' => substr($row, 0, $keylen), 'headerValue' => trim(substr($row, $keylen + 1)));
  207. }
  208. }
  209. }
  210. $apiInfo['headerInfo'] = $headerInfo;
  211. unset($headerInfo);
  212. $apiRequestParam = array();
  213. $items = $request['data'];
  214. if (is_array($items)) {
  215. foreach ($items as $item) {
  216. $param['paramKey'] = $item['key'];
  217. $param['paramValue'] = $item['value'];
  218. $param['paramType'] = ($item['type'] == 'text') ? 0 : 1;
  219. $param['paramNotNull'] = $item['enabled'] ? 0 : 1;
  220. $param['paramName'] = '';
  221. $param['paramLimit'] = '';
  222. $param['paramValueList'] = array();
  223. $apiRequestParam[] = $param;
  224. unset($param);
  225. }
  226. }
  227. $apiInfo['requestInfo'] = $apiRequestParam;
  228. unset($apiRequestParam);
  229. $apiInfo['resultInfo'] = array();
  230. $apiList[] = $apiInfo;
  231. unset($apiInfo);
  232. }
  233. }
  234. $groupInfo['apiList'] = $apiList;
  235. unset($apiList);
  236. }
  237. }
  238. $dao = new ImportDao;
  239. return $dao->importOther($projectInfo, $groupInfoList, $_SESSION['userID']);
  240. } catch (\PDOException $e) {
  241. var_dump($e->getMessage());
  242. return FALSE;
  243. }
  244. }
  245. /**
  246. * 导入V2版本postman
  247. * @param $data string 从Postman V2版本导出的Json格式数据
  248. * @return bool
  249. */
  250. public function importPostmanV2(&$data)
  251. {
  252. try {
  253. $project_info = array(
  254. 'projectName' => $data['info']['name'],
  255. 'projectType' => 0,
  256. 'projectVersion' => 1.0
  257. );
  258. $groups = array();
  259. $groups[0]['groupName'] = '默认分组';
  260. $groups[0]['apiList'] = array();
  261. $group_count = 1;
  262. foreach ($data['item'] as $item) {
  263. $api_info = array();
  264. if (empty($item['item'])) {
  265. $api_info['baseInfo']['apiName'] = $item['name'];
  266. if (!empty($item['request']['url']['raw'])) {
  267. $api_info['baseInfo']['apiURI'] = explode('?', $item['request']['url']['raw'])[0];
  268. } else {
  269. $api_info['baseInfo']['apiURI'] = $item['request']['url'];
  270. }
  271. if (is_array($item['request']['url'])) {
  272. $api_info['baseInfo']['apiProtocol'] = (strpos($item['request']['url']['raw'], 'https') !== 0) ? 0 : 1;
  273. } else {
  274. $api_info['baseInfo']['apiProtocol'] = (strpos($item['request']['url'], 'https') !== 0) ? 0 : 1;
  275. }
  276. $api_info['baseInfo']['apiStatus'] = 0;
  277. $api_info['baseInfo']['starred'] = 0;
  278. $api_info['baseInfo']['apiRequestRaw'] = $item['request']['body']['raw'];
  279. $api_info['baseInfo']['apiSuccessMock'] = '';
  280. $api_info['baseInfo']['apiFailureMock'] = '';
  281. $api_info['baseInfo']['apiNoteType'] = 0;
  282. $api_info['baseInfo']['apiNote'] = '';
  283. $api_info['baseInfo']['apiNoteRaw'] = '';
  284. $api_info['baseInfo']['apiUpdateTime'] = date("Y-m-d H:i:s", time());
  285. // 判断请求参数的类型
  286. if ($item['request']['body']['mode'] == 'raw') {
  287. $api_info['baseInfo']['apiRequestParamType'] = 1;
  288. } else {
  289. $api_info['baseInfo']['apiRequestParamType'] = 0;
  290. }
  291. switch ($item['request']['method']) {
  292. case 'POST' :
  293. $api_info['baseInfo']['apiRequestType'] = 0;
  294. break;
  295. case 'GET' :
  296. $api_info['baseInfo']['apiRequestType'] = 1;
  297. break;
  298. case 'PUT' :
  299. $api_info['baseInfo']['apiRequestType'] = 2;
  300. break;
  301. case 'DELETE' :
  302. $api_info['baseInfo']['apiRequestType'] = 3;
  303. break;
  304. case 'HEAD' :
  305. $api_info['baseInfo']['apiRequestType'] = 4;
  306. break;
  307. case 'OPTIONS' :
  308. $api_info['baseInfo']['apiRequestType'] = 5;
  309. break;
  310. case 'PATCH' :
  311. $api_info['baseInfo']['apiRequestType'] = 6;
  312. break;
  313. }
  314. $headerInfo = array();
  315. foreach ($item['request']['header'] as $header) {
  316. $headerInfo[] = array(
  317. 'headerName' => $header['key'],
  318. 'headerValue' => $header['value']
  319. );
  320. }
  321. $api_info['headerInfo'] = $headerInfo;
  322. unset($headerInfo);
  323. $api_info_request_param = array();
  324. if ($item['request']['body']['mode'] == 'formdata') {
  325. $parameters = $item['request']['body']['formdata'];
  326. foreach ($parameters as $parameter) {
  327. $param = array();
  328. $param['paramKey'] = $parameter['key'];
  329. $param['paramValue'] = $parameter['value'];
  330. $param['paramType'] = ($parameter['type'] == 'text') ? 0 : 1;
  331. $param['paramNotNull'] = $parameter['enabled'] ? 0 : 1;
  332. $param['paramName'] = '';
  333. $param['paramLimit'] = '';
  334. $param['paramValueList'] = array();
  335. $api_info_request_param[] = $param;
  336. unset($param);
  337. }
  338. }
  339. if ($item['request']['method'] == 'GET' && !empty($item['request']['url']['raw'])) {
  340. $parameters = $item['request']['url']['query'];
  341. foreach ($parameters as $parameter) {
  342. $param = array();
  343. $param['paramKey'] = $parameter['key'];
  344. $param['paramValue'] = $parameter['value'];
  345. $param['paramType'] = 0;
  346. $param['paramNotNull'] = $parameter['equals'] ? 0 : 1;
  347. $param['paramName'] = '';
  348. $param['paramLimit'] = '';
  349. $param['paramValueList'] = array();
  350. $api_info_request_param[] = $param;
  351. unset($param);
  352. }
  353. }
  354. $api_info['requestInfo'] = $api_info_request_param;
  355. unset($api_info_request_param);
  356. $api_info['resultInfo'] = array();
  357. $groups[0]['apiList'][] = $api_info;
  358. unset($api_info);
  359. } else {
  360. $groups[$group_count]['groupName'] = $item['name'];
  361. $groups[$group_count]['apiList'] = array();
  362. foreach ($item['item'] as $api) {
  363. $api_info = array();
  364. $api_info['baseInfo']['apiName'] = $api['name'];
  365. if (empty($api_info['baseInfo']['apiName'])) {
  366. $api_info['baseInfo']['apiName'] = 'empty_name';
  367. }
  368. if (!empty($api['request']['url']['raw'])) {
  369. $api_info['baseInfo']['apiURI'] = explode('?', $api['request']['url']['raw'])[0];
  370. } else {
  371. $api_info['baseInfo']['apiURI'] = $api['request']['url'];
  372. }
  373. if (empty($api_info['baseInfo']['apiURI'])) {
  374. $api_info['baseInfo']['apiURI'] = 'empty_uri';
  375. }
  376. if (is_array($api['request']['url'])) {
  377. $api_info['baseInfo']['apiProtocol'] = (strpos($api['request']['url']['raw'], 'https') !== 0) ? 0 : 1;
  378. } else {
  379. $api_info['baseInfo']['apiProtocol'] = (strpos($api['request']['url'], 'https') !== 0) ? 0 : 1;
  380. }
  381. $api_info['baseInfo']['apiStatus'] = 0;
  382. $api_info['baseInfo']['starred'] = 0;
  383. $api_info['baseInfo']['apiRequestRaw'] = $api['request']['body']['raw'];
  384. $api_info['baseInfo']['apiSuccessMock'] = '';
  385. $api_info['baseInfo']['apiFailureMock'] = '';
  386. $api_info['baseInfo']['apiNoteType'] = 0;
  387. $api_info['baseInfo']['apiNote'] = '';
  388. $api_info['baseInfo']['apiNoteRaw'] = '';
  389. $api_info['baseInfo']['apiUpdateTime'] = date("Y-m-d H:i:s", time());
  390. // 判断请求参数的类型
  391. if ($api['request']['body']['mode'] == 'raw') {
  392. $api_info['baseInfo']['apiRequestParamType'] = 1;
  393. } else {
  394. $api_info['baseInfo']['apiRequestParamType'] = 0;
  395. }
  396. switch ($api['request']['method']) {
  397. case 'POST' :
  398. $api_info['baseInfo']['apiRequestType'] = 0;
  399. break;
  400. case 'GET' :
  401. $api_info['baseInfo']['apiRequestType'] = 1;
  402. break;
  403. case 'PUT' :
  404. $api_info['baseInfo']['apiRequestType'] = 2;
  405. break;
  406. case 'DELETE' :
  407. $api_info['baseInfo']['apiRequestType'] = 3;
  408. break;
  409. case 'HEAD' :
  410. $api_info['baseInfo']['apiRequestType'] = 4;
  411. break;
  412. case 'OPTIONS' :
  413. $api_info['baseInfo']['apiRequestType'] = 5;
  414. break;
  415. case 'PATCH' :
  416. $api_info['baseInfo']['apiRequestType'] = 6;
  417. break;
  418. }
  419. $headerInfo = array();
  420. foreach ($api['request']['header'] as $header) {
  421. $headerInfo[] = array(
  422. 'headerName' => $header['key'],
  423. 'headerValue' => $header['value']
  424. );
  425. }
  426. $api_info['headerInfo'] = $headerInfo;
  427. unset($headerInfo);
  428. $api_info_request_param = array();
  429. if ($api['request']['body']['mode'] == 'formdata') {
  430. $parameters = $api['request']['body']['formdata'];
  431. foreach ($parameters as $parameter) {
  432. $param['paramKey'] = $parameter['key'];
  433. $param['paramValue'] = $parameter['value'];
  434. $param['paramType'] = ($parameter['type'] == 'text') ? 0 : 1;
  435. $param['paramNotNull'] = $parameter['enabled'] ? 0 : 1;
  436. $param['paramName'] = '';
  437. $param['paramLimit'] = '';
  438. $param['paramValueList'] = array();
  439. $api_info_request_param[] = $param;
  440. unset($param);
  441. }
  442. }
  443. $api_info['requestInfo'] = $api_info_request_param;
  444. unset($api_info_request_param);
  445. $api_info['resultInfo'] = array();
  446. $groups[$group_count]['apiList'][] = $api_info;
  447. unset($api_info);
  448. }
  449. $group_count++;
  450. }
  451. }
  452. $dao = new ImportDao();
  453. return $dao->importOther($project_info, $groups, $_SESSION['userID']);
  454. } catch (\PDOException $e) {
  455. return FALSE;
  456. }
  457. }
  458. /**
  459. * 导入swagger
  460. * @param string $content 内容
  461. * @return bool
  462. */
  463. public function importSwagger(&$content)
  464. {
  465. $user_id = $_SESSION['userID'];
  466. $swagger = json_decode($content, TRUE);
  467. $project_info = $swagger['info'];
  468. // 项目类型默认web
  469. $project_type = '0';
  470. // 新建一个默认的状态码分组
  471. $group_info_list[] = array('groupName' => '默认分组');
  472. $request_type = array(
  473. 'POST' => '0',
  474. 'GET' => '1',
  475. 'PUT' => '2',
  476. 'DELETE' => '3',
  477. 'HEAD' => '4',
  478. 'OPTIONS' => '5',
  479. 'PATCH' => '6'
  480. );
  481. // 请求协议数组
  482. $protocol = array(
  483. 'HTTP' => 0,
  484. 'HTTPS' => 1
  485. );
  486. // 请求参数类型数组
  487. $param_type = array(
  488. 'string' => '0',
  489. 'file' => '1',
  490. 'json' => '2',
  491. 'int' => '3',
  492. 'float' => '4',
  493. 'double' => '5',
  494. 'date' => '6',
  495. 'datetime' => '7',
  496. 'boolean' => '8',
  497. 'byte' => '9',
  498. 'short' => '10',
  499. 'long' => '11',
  500. 'array' => '12',
  501. 'object' => '13',
  502. 'number' => '14'
  503. );
  504. // 获取请求协议
  505. $api_protocol = $protocol[strtoupper($swagger['schemes'][0])];
  506. if (empty($api_protocol)) {
  507. $api_protocol = 1;
  508. }
  509. // 如果项目描述为空,默认为title
  510. if (empty($project_info['description'])) {
  511. $project_info['description'] = $project_info['title'];
  512. }
  513. // 项目信息
  514. $project_info = array(
  515. 'projectName' => $project_info['title'],
  516. 'projectType' => $project_type,
  517. 'projectVersion' => $project_info['version'],
  518. 'projectDesc' => $project_info['description']
  519. );
  520. $apiList = $swagger['paths'];
  521. $api_list = array();
  522. $group_name_list = array();
  523. foreach ($apiList as $api_uri => $api_info_list) {
  524. // 拆分详细api接口信息
  525. foreach ($api_info_list as $api_request_type => $api_info) {
  526. $group_name = $api_info['tags'][0];
  527. if (in_array($group_name, $group_name_list)) {
  528. continue;
  529. }
  530. $group_info_list[] = array('groupName' => $group_name);
  531. $group_name_list[] = $group_name;
  532. }
  533. }
  534. if (is_array($group_info_list)) {
  535. foreach ($group_info_list as &$group_info) {
  536. if (is_array($apiList)) {
  537. // 拆分多条api接口信息
  538. foreach ($apiList as $api_uri => $api_info_list) {
  539. // 拆分详细api接口信息
  540. foreach ($api_info_list as $api_request_type => $api_info) {
  541. if ($api_info['tags'][0] != $group_info['groupName']) {
  542. continue;
  543. }
  544. if (empty($api_info['summary'])) {
  545. // 如果接口名不存在跳过
  546. $api_info['summary'] = $api_info['operationId'];
  547. }
  548. // 获取接口名称
  549. $apiInfo['baseInfo']['apiName'] = $api_info['summary'];
  550. // 获取请求路径
  551. // if(strpos($uri, '{'))
  552. // {
  553. // $api_uri = preg_replace('/\{.*\}/', $api_info['operationId'], $uri);
  554. // }
  555. // else
  556. // {
  557. // $api_uri = $uri;
  558. // }
  559. // 获取路径
  560. $apiInfo['baseInfo']['apiURI'] = $api_uri;
  561. // 接口状态默认启用
  562. $apiInfo['baseInfo']['apiStatus'] = 0;
  563. // 接口请求参数的类型
  564. $apiInfo['baseInfo']['apiRequestParamType'] = 0;
  565. // 星标状态
  566. $apiInfo['baseInfo']['starred'] = 0;
  567. // 接口备注的类型
  568. $apiInfo['baseInfo']['apiNoteType'] = 0;
  569. // 获取请求方式
  570. $apiInfo['baseInfo']['apiRequestType'] = $request_type[strtoupper($api_request_type)];
  571. // 请求头部
  572. $apiInfo['headerInfo'] = array();
  573. if ($api_info['consumes']) {
  574. for ($i = 0; $i < count($api_info['consumes']); $i++) {
  575. $apiInfo['headerInfo'][$i] = array(
  576. 'headerName' => 'Content-Type',
  577. 'headerValue' => $api_info['consumes'][$i]
  578. );
  579. }
  580. }
  581. if ($api_info['produces']) {
  582. for ($i = 0; $i < count($api_info['produces']); $i++) {
  583. $apiInfo['headerInfo'][] = array(
  584. 'headerName' => 'Accept',
  585. 'headerValue' => $api_info['produces'][$i]
  586. );
  587. }
  588. }
  589. // 获取请求参数
  590. $apiInfo['requestInfo'] = array();
  591. if ($api_info['parameters']) {
  592. $i = 0;
  593. foreach ($api_info['parameters'] as $param) {
  594. // 获取请求参数名称
  595. $apiInfo['requestInfo'][$i]['paramKey'] = $param['name'];
  596. // 获取请求参数类型
  597. switch ($param['type']) {
  598. case "integer" :
  599. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['int'];
  600. break;
  601. case "string" :
  602. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['string'];
  603. break;
  604. case 'long' :
  605. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['long'];
  606. break;
  607. case 'float' :
  608. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['float'];
  609. break;
  610. case 'double' :
  611. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['double'];
  612. break;
  613. case 'byte' :
  614. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['byte'];
  615. break;
  616. case 'file' :
  617. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['file'];
  618. break;
  619. case 'date' :
  620. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['date'];
  621. break;
  622. case 'dateTime' :
  623. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['dateTime'];
  624. break;
  625. case 'boolean' :
  626. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['boolean'];
  627. break;
  628. case 'array' :
  629. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['array'];
  630. break;
  631. case 'json' :
  632. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['json'];
  633. break;
  634. case 'object' :
  635. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['object'];
  636. break;
  637. case 'number' :
  638. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['number'];
  639. break;
  640. default :
  641. $apiInfo['requestInfo'][$i]['paramType'] = $param_type['string'];
  642. }
  643. // 获取参数说明
  644. $apiInfo['requestInfo'][$i]['paramName'] = $param['description'];
  645. // 获取是否可以为空
  646. $apiInfo['requestInfo'][$i]['paramNotNull'] = $param['required'] ? 0 : 1;
  647. // 设置参数值示例
  648. $apiInfo['requestInfo'][$i]['paramValue'] = '';
  649. ++$i;
  650. }
  651. }
  652. // 返回结果
  653. $apiInfo['resultInfo'] = array();
  654. if ($api_info['responses']) {
  655. $k = 0;
  656. foreach ($api_info['responses'] as $paramKey => $respon) {
  657. $apiInfo['resultInfo'][$k]['paramType'] = '';
  658. // 获取返回参数类型
  659. switch ($respon['schema']['type']) {
  660. case "integer" :
  661. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['int'];
  662. break;
  663. case "string" :
  664. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['string'];
  665. break;
  666. case 'long' :
  667. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['long'];
  668. break;
  669. case 'float' :
  670. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['float'];
  671. break;
  672. case 'double' :
  673. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['double'];
  674. break;
  675. case 'byte' :
  676. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['byte'];
  677. break;
  678. case 'file' :
  679. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['file'];
  680. break;
  681. case 'date' :
  682. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['date'];
  683. break;
  684. case 'dateTime' :
  685. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['dateTime'];
  686. break;
  687. case 'boolean' :
  688. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['boolean'];
  689. break;
  690. case 'array' :
  691. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['array'];
  692. break;
  693. case 'json' :
  694. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['json'];
  695. break;
  696. case 'object' :
  697. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['object'];
  698. break;
  699. case 'number' :
  700. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['number'];
  701. break;
  702. default :
  703. $apiInfo['resultInfo'][$k]['paramType'] = $param_type['string'];
  704. }
  705. // 获取返回参数名
  706. $apiInfo['resultInfo'][$k]['paramKey'] = $paramKey;
  707. // 获取返回参数说明
  708. $apiInfo['resultInfo'][$k]['paramName'] = $respon['description'];
  709. // 获取返回值
  710. $apiInfo['resultInfo'][$k]['paramNotNull'] = '0';
  711. ++$k;
  712. }
  713. }
  714. $apiInfo['baseInfo']['apiSuccessMock'] = '';
  715. $apiInfo['baseInfo']['apiFailureMock'] = '';
  716. $apiInfo['baseInfo']['apiNoteRaw'] = '';
  717. $apiInfo['baseInfo']['apiNote'] = '';
  718. $apiInfo['baseInfo']['apiRequestRaw'] = '';
  719. $apiInfo['baseInfo']['mockRule'] = '';
  720. $apiInfo['baseInfo']['mockResult'] = '';
  721. $apiInfo['baseInfo']['apiProtocol'] = $api_protocol;
  722. $apiInfo['baseInfo']['apiUpdateTime'] = date('Y-m-d H:i:s', time());
  723. $api_list[] = $apiInfo;
  724. unset($apiInfo);
  725. }
  726. }
  727. }
  728. $group_info['apiList'] = $api_list;
  729. unset($api_list);
  730. }
  731. }
  732. $dao = new ImportDao;
  733. $result = $dao->importOther($project_info, $group_info_list, $user_id);
  734. if ($result) {
  735. return TRUE;
  736. } else {
  737. return FALSE;
  738. }
  739. }
  740. /**
  741. * 导入RAP
  742. * @param $data
  743. * @return bool
  744. */
  745. public function importRAP(&$data)
  746. {
  747. $user_id = $_SESSION['userID'];
  748. $param_type = array('string' => '0', 'file' => '1', 'json' => '2', 'int' => '3', 'float' => '4', 'double' => '5', 'date' => '6', 'datetime' => '7', 'boolean' => '8', 'byte' => '9', 'short' => '10', 'long' => '11', 'array' => '12', 'object' => '13', 'number' => '14');
  749. try {
  750. $project_info = array(
  751. 'projectName' => $data['name'],
  752. 'projectType' => 0,
  753. 'projectVersion' => 1.0
  754. );
  755. $group_info_list = array();
  756. foreach ($data['moduleList'] as $module) {
  757. $group_info = array(
  758. 'groupName' => $module['name'],
  759. 'apiList' => array()
  760. );
  761. foreach ($module['pageList'] as $pageList) {
  762. $child_group_info = null;
  763. if ($pageList['name']) {
  764. $child_group_info = array(
  765. 'groupName' => $pageList['name'],
  766. 'apiList' => array()
  767. );
  768. }
  769. $api_list = array();
  770. foreach ($pageList['actionList'] as $action) {
  771. $api_info = array();
  772. $api_info['baseInfo']['apiName'] = $action['name'];
  773. $api_info['baseInfo']['apiURI'] = stripslashes($action['requestUrl']);
  774. $api_info['baseInfo']['apiProtocol'] = 1;
  775. $api_info['baseInfo']['apiStatus'] = 0;
  776. $api_info['baseInfo']['starred'] = 0;
  777. $api_info['baseInfo']['apiSuccessMock'] = $action['responseTemplate'];
  778. $api_info['baseInfo']['apiFailureMock'] = '';
  779. $api_info['baseInfo']['apiRequestParamType'] = 0;
  780. $api_info['baseInfo']['apiRequestRaw'] = '';
  781. $api_info['baseInfo']['apiNoteType'] = 0;
  782. $api_info['baseInfo']['apiNote'] = '&lt;p&gt;' . $action['description'] . '&lt;p&gt;';
  783. $api_info['baseInfo']['apiNoteRaw'] = '';
  784. $api_info['baseInfo']['apiUpdateTime'] = date("Y-m-d H:i:s", time());
  785. switch ($action['requestType']) {
  786. case '1' :
  787. $api_info['baseInfo']['apiRequestType'] = 1;
  788. //GET
  789. break;
  790. case '2' :
  791. $api_info['baseInfo']['apiRequestType'] = 0;
  792. //POST
  793. break;
  794. case '3' :
  795. $api_info['baseInfo']['apiRequestType'] = 2;
  796. //PUT
  797. break;
  798. case '4' :
  799. $api_info['baseInfo']['apiRequestType'] = 3;
  800. //DELETE
  801. break;
  802. default :
  803. $api_info['baseInfo']['apiRequestType'] = 1;
  804. //默认设置为GET
  805. break;
  806. }
  807. $api_info['headerInfo'] = array();
  808. $api_request_param = array();
  809. foreach ($action['requestParameterList'] as $parameter) {
  810. $param['paramKey'] = $parameter['identifier'];
  811. $param['paramValue'] = $parameter['remark'];
  812. $param['paramNotNull'] = 0;
  813. $param['paramName'] = $parameter['name'];
  814. $param['paramLimit'] = $parameter['dataType'];
  815. $param['paramValueList'] = array();
  816. //获取请求参数类型
  817. $param['paramType'] = $this->getDataType($parameter['dataType']);
  818. $api_request_param[] = $param;
  819. if (!empty($parameter['parameterList'])) {
  820. foreach ($parameter['parameterList'] as $parameter1) {
  821. $param1['paramKey'] = $param['paramKey'] . '>>' . $parameter1['identifier'];
  822. $param1['paramValue'] = $parameter1['remark'];
  823. $param1['paramLimit'] = $parameter1['dataType'];
  824. $param1['paramNotNull'] = 0;
  825. $param1['paramName'] = $parameter1['name'];
  826. $param1['paramValueList'] = array();
  827. //获取请求参数类型
  828. $param1['paramType'] = $this->getDataType($parameter1['dataType']);
  829. $api_request_param[] = $param1;
  830. if (!empty($parameter1['parameterList'])) {
  831. foreach ($parameter1['parameterList'] as $parameter2) {
  832. $param2['paramKey'] = $param1['paramKey'] . '>>' . $parameter2['identifier'];
  833. $param2['paramValue'] = $parameter2['remark'];
  834. $param2['paramLimit'] = $parameter2['dataType'];
  835. $param2['paramNotNull'] = 0;
  836. $param2['paramName'] = $parameter2['name'];
  837. $param2['paramValueList'] = array();
  838. //获取请求参数类型
  839. $param2['paramType'] = $this->getDataType($parameter2['dataType']);
  840. $api_request_param[] = $param2;
  841. if (!empty($parameter2['parameterList'])) {
  842. foreach ($parameter2['parameterList'] as $parameter3) {
  843. $param3['paramKey'] = $param2['paramKey'] . '>>' . $parameter3['identifier'];
  844. $param3['paramValue'] = $parameter3['remark'];
  845. $param3['paramLimit'] = $parameter3['dataType'];
  846. $param3['paramNotNull'] = 0;
  847. $param3['paramName'] = $parameter3['name'];
  848. $param3['paramValueList'] = array();
  849. //获取请求参数类型
  850. $param3['paramType'] = $this->getDataType($parameter3['dataType']);
  851. $api_request_param[] = $param3;
  852. if (!empty($parameter3['parameterList'])) {
  853. foreach ($parameter3['parameterList'] as $parameter4) {
  854. $param4['paramKey'] = $param3['paramKey'] . '>>' . $parameter4['identifier'];
  855. $param4['paramValue'] = $parameter4['remark'];
  856. $param4['paramLimit'] = $parameter4['dataType'];
  857. $param4['paramNotNull'] = 0;
  858. $param4['paramName'] = $parameter4['name'];
  859. $param4['paramValueList'] = array();
  860. //获取请求参数类型
  861. $param4['paramType'] = $this->getDataType($parameter4['dataType']);
  862. $api_request_param[] = $param4;
  863. if (!empty($parameter4['parameterList'])) {
  864. foreach ($parameter4['parameterList'] as $parameter5) {
  865. $param5['paramKey'] = $param4['paramKey'] . '>>' . $parameter5['identifier'];
  866. $param5['paramValue'] = $parameter5['remark'];
  867. $param5['paramLimit'] = $parameter5['dataType'];
  868. $param5['paramNotNull'] = 0;
  869. $param5['paramName'] = $parameter5['name'];
  870. $param5['paramValueList'] = array();
  871. //获取请求参数类型
  872. $param5['paramType'] = $this->getDataType($parameter5['dataType']);
  873. $api_request_param[] = $param5;
  874. if (!empty($parameter5['parameterList'])) {
  875. foreach ($parameter5['parameterList'] as $parameter6) {
  876. $param6['paramKey'] = $param5['paramKey'] . '>>' . $parameter6['identifier'];
  877. $param6['paramValue'] = $parameter6['remark'];
  878. $param6['paramLimit'] = $parameter6['dataType'];
  879. $param6['paramNotNull'] = 0;
  880. $param6['paramName'] = $parameter6['name'];
  881. $param6['paramValueList'] = array();
  882. //获取请求参数类型
  883. $param6['paramType'] = $this->getDataType($parameter6['dataType']);
  884. $api_request_param[] = $param6;
  885. unset($param6);
  886. }
  887. }
  888. unset($param5);
  889. }
  890. }
  891. unset($param4);
  892. }
  893. }
  894. unset($param3);
  895. }
  896. }
  897. unset($param2);
  898. }
  899. }
  900. unset($param1);
  901. }
  902. }
  903. unset($param);
  904. }
  905. $api_info['requestInfo'] = $api_request_param;
  906. unset($api_request_param);
  907. $api_result_param = array();
  908. foreach ($action['responseParameterList'] as $parameter) {
  909. $param['paramKey'] = $parameter['identifier'];
  910. $param['paramNotNull'] = 0;
  911. $param['paramName'] = $parameter['name'];
  912. $param['paramValueList'] = array();
  913. //获取请求参数类型
  914. $param['paramType'] = $this->getDataType($parameter['dataType']);
  915. $api_result_param[] = $param;
  916. if (!empty($parameter['parameterList'])) {
  917. foreach ($parameter['parameterList'] as $parameter1) {
  918. $param1['paramKey'] = $param['paramKey'] . '>>' . $parameter1['identifier'];
  919. $param1['paramNotNull'] = 0;
  920. $param1['paramName'] = $parameter1['name'];
  921. $param1['paramValueList'] = array();
  922. //获取请求参数类型
  923. $param1['paramType'] = $this->getDataType($parameter1['dataType']);
  924. $api_result_param[] = $param1;
  925. if (!empty($parameter1['parameterList'])) {
  926. foreach ($parameter1['parameterList'] as $parameter2) {
  927. $param2['paramKey'] = $param1['paramKey'] . '>>' . $parameter2['identifier'];
  928. $param2['paramNotNull'] = 0;
  929. $param2['paramName'] = $parameter2['name'];
  930. $param2['paramValueList'] = array();
  931. //获取请求参数类型
  932. $param2['paramType'] = $this->getDataType($parameter2['dataType']);
  933. $api_result_param[] = $param2;
  934. if (!empty($parameter2['parameterList'])) {
  935. foreach ($parameter2['parameterList'] as $parameter3) {
  936. $param3['paramKey'] = $param2['paramKey'] . '>>' . $parameter3['identifier'];
  937. $param3['paramNotNull'] = 0;
  938. $param3['paramName'] = $parameter3['name'];
  939. $param3['paramValueList'] = array();
  940. //获取请求参数类型
  941. $param3['paramType'] = $this->getDataType($parameter3['dataType']);
  942. $api_result_param[] = $param3;
  943. if (!empty($parameter3['parameterList'])) {
  944. foreach ($parameter3['parameterList'] as $parameter4) {
  945. $param4['paramKey'] = $param3['paramKey'] . '>>' . $parameter4['identifier'];
  946. $param4['paramNotNull'] = 0;
  947. $param4['paramName'] = $parameter4['name'];
  948. $param4['paramValueList'] = array();
  949. //获取请求参数类型
  950. $param4['paramType'] = $this->getDataType($parameter4['dataType']);
  951. $api_result_param[] = $param4;
  952. if (!empty($parameter4['parameterList'])) {
  953. foreach ($parameter4['parameterList'] as $parameter5) {
  954. $param5['paramKey'] = $param4['paramKey'] . '>>' . $parameter5['identifier'];
  955. $param5['paramNotNull'] = 0;
  956. $param5['paramName'] = $parameter5['name'];
  957. $param5['paramValueList'] = array();
  958. //获取请求参数类型
  959. $param5['paramType'] = $this->getDataType($parameter5['dataType']);
  960. $api_result_param[] = $param5;
  961. if (!empty($parameter5['parameterList'])) {
  962. foreach ($parameter5['parameterList'] as $parameter6) {
  963. $param6['paramKey'] = $param5['paramKey'] . '>>' . $parameter6['identifier'];
  964. $param6['paramNotNull'] = 0;
  965. $param6['paramName'] = $parameter6['name'];
  966. $param6['paramValueList'] = array();
  967. //获取请求参数类型
  968. $param6['paramType'] = $this->getDataType($parameter6['dataType']);
  969. $api_result_param[] = $param6;
  970. unset($param6);
  971. }
  972. }
  973. unset($param5);
  974. }
  975. }
  976. unset($param4);
  977. }
  978. }
  979. unset($param3);
  980. }
  981. }
  982. unset($param2);
  983. }
  984. }
  985. unset($param1);
  986. }
  987. }
  988. unset($param);
  989. }
  990. $api_info['resultInfo'] = $api_result_param;
  991. unset($api_result_param);
  992. $api_list[] = $api_info;
  993. unset($api_info);
  994. }
  995. if ($child_group_info) {
  996. $child_group_info['apiList'] = $api_list;
  997. $group_info['childGroupList'][] = $child_group_info;
  998. } else {
  999. $group_info['apiList'] = array_merge($group_info['apiList'], $api_list);
  1000. }
  1001. unset($api_list);
  1002. }
  1003. $group_info_list[] = $group_info;
  1004. unset($group_info);
  1005. }
  1006. $dao = new ImportDao();
  1007. return $dao->importOther($project_info, $group_info_list, $user_id);
  1008. } catch (\PDOException $e) {
  1009. return FALSE;
  1010. }
  1011. }
  1012. /**
  1013. * 获取数据类型
  1014. * @param $data_type
  1015. * @return mixed|string
  1016. */
  1017. private function getDataType(&$data_type)
  1018. {
  1019. $param_type = array('string' => '0', 'file' => '1', 'json' => '2', 'int' => '3', 'float' => '4', 'double' => '5', 'date' => '6', 'datetime' => '7', 'boolean' => '8', 'byte' => '9', 'short' => '10', 'long' => '11', 'array' => '12', 'object' => '13', 'number' => '14');
  1020. $type = 'array';
  1021. //获取请求参数类型
  1022. switch ($data_type) {
  1023. case "integer":
  1024. $type = $param_type['int'];
  1025. break;
  1026. case "string":
  1027. $type = $param_type['string'];
  1028. break;
  1029. case 'long':
  1030. $type = $param_type['long'];
  1031. break;
  1032. case 'float':
  1033. $type = $param_type['float'];
  1034. break;
  1035. case 'double':
  1036. $type = $param_type['double'];
  1037. break;
  1038. case 'byte':
  1039. $type = $param_type['byte'];
  1040. break;
  1041. case 'file':
  1042. $type = $param_type['file'];
  1043. break;
  1044. case 'date':
  1045. $type = $param_type['date'];
  1046. break;
  1047. case 'dateTime':
  1048. $type = $param_type['dateTime'];
  1049. break;
  1050. case 'boolean':
  1051. $type = $param_type['boolean'];
  1052. break;
  1053. case 'array':
  1054. $type = $param_type['array'];
  1055. break;
  1056. case 'json':
  1057. $type = $param_type['json'];
  1058. break;
  1059. case 'object':
  1060. $type = $param_type['object'];
  1061. break;
  1062. case 'number':
  1063. $type = $param_type['number'];
  1064. break;
  1065. default:
  1066. $type = $param_type['array'];
  1067. }
  1068. return $type;
  1069. }
  1070. }
  1071. ?>