123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469 |
- <?php
- namespace Manage\Src;
- use Dever;
- use Dever\Http\Api as Base;
- class Api
- {
- /**
- * fast
- *
- * @var array
- */
- private $fast = array();
- /**
- * data
- *
- * @var array
- */
- private $data = array();
- /**
- * 启动tcp服务
- *
- * @return array
- */
- public function tcp()
- {
- //return Dever::tcpReload(30000);
- }
- /**
- * 测试dyna配置
- *
- * @return array
- */
- public function dyna()
- {
- $data['name'] = 1;
- $data = Dever::dyna('home', $data);
- return $data;
- }
- /**
- * 测试传统模板引擎(类似smarty)
- *
- * @return array
- */
- public function test_display_api()
- {
- $data['test'] = 1111111111111;
- $data['data'] = $this->test_foreach();
- return Dever::render('example/render', $data);
- }
- public function test_display_data()
- {
- return 12323234;
- }
- public function test_foreach()
- {
- $config = array
- (
- array
- (
- 'id' => 1,
- 'name' => '1111',
- 'child' => array
- (
- array
- (
- 'id' => 3,
- 'name' => '3333',
- 'child' => array
- (
- array
- (
- 'id' => 9,
- 'name' => '9999',
- ),
- array
- (
- 'id' => 10,
- 'name' => '10101010',
- ),
- ),
- ),
- array
- (
- 'id' => 4,
- 'name' => '4444',
- ),
- ),
- ),
- array
- (
- 'id' => 2,
- 'name' => '2222',
- 'child' => array
- (
- array
- (
- 'id' => 5,
- 'name' => '5555',
- ),
- array
- (
- 'id' => 6,
- 'name' => '6666',
- ),
- ),
- ),
- );
- return $config;
- }
- /**
- * 测试接口定义
- *
- * @return array
- */
- public function test_api()
- {
- $data = Dever::load('module/data.test');
- print_r($data);die;
- }
- /**
- * 测试逻辑验证步骤,必须包含step
- *
- * @return array
- */
- public function test_step_1()
- {
- print_r(Dever::input('type'));
- # 传给下一步的数据
- Dever::setStep('test');
- $url = Dever::url('api.test_step_2?' . http_build_query(Dever::$global['step'][1]));
- print_r($url);die;
- #ok
- echo 11;die;
- }
- /**
- * 测试逻辑验证步骤,必须包含step
- *
- * @return array
- */
- public function test_step_2()
- {
- $data = Dever::getStep();
- print_r($data);die;
- echo 22;die;
- }
- /**
- * 从数据库中得到所有接口,如果为空,则从项目中读取一次
- *
- * @return array
- */
- private function get($auth = '')
- {
- $data = Dever::load('manage/api-all');
- if ($data) {
- foreach ($data as $k => $v) {
- }
- } else {
- # 数据为空,读取一次,后续就得手动读取了
- $this->load();
- $data = $this->get();
- }
- return $data;
- }
- /**
- * 更新接口
- *
- * @return array
- */
- public function update_api()
- {
- $this->load();
- Dever::out('yes');
- }
- /**
- * 载入从项目中定义好的接口
- *
- * @return array
- */
- public function load()
- {
- $project = Dever::load('manage/project.get');
- foreach ($project as $k => $v) {
- $data = Base::config($v['path']);
- if ($data) {
- foreach ($data as $i => $j) {
- $j['order'] = isset($j['order']) ? $j['order'] : 1;
- $this->updateApi($i, $j['name'], $j['type'], $k, $j['request'], $j['response'], $j['order']);
- }
- }
- }
- }
- private function updateApi($site, $name, $type, $project, $request, $response, $reorder, $state = true)
- {
- $info = Dever::db('manage/api')->site(array('where_site' => $site, 'where_project' => $project));
- if (!$info) {
- $update['add_site'] = $site;
- $update['add_name'] = $name;
- $update['add_type'] = $type;
- $update['add_project'] = $project;
- $update['add_reorder'] = $reorder;
- $info['id'] = Dever::db('manage/api')->insert($update);
- } elseif ($state) {
- $update['set_site'] = $site;
- $update['set_name'] = $name;
- $update['set_type'] = $type;
- $update['set_project'] = $project;
- $update['set_reorder'] = $reorder;
- $update['where_id'] = $info['id'];
- Dever::db('manage/api')->update($update);
- }
- if ($info['id'] > 0) {
- $this->updateApiData(array($response, $request), $info['id']);
- }
- return true;
- }
- private function updateApiData($data, $id)
- {
- $this->api_response = $this->api_request = array();
- foreach($data as $k => $v) {
- if ($v && is_array($v)) {
- if ($k == 0) {
- $api = 'api_response';
- } else {
- $api = 'api_request';
- }
- $this->insertApiData($api, $v, $id, -1, 0);
- }
- }
- }
- private function insertApiData($api, $data, $aid, $id = -1, $num = 0)
- {
- foreach($data as $k => $v) {
- $value = $v;
- if (is_array($value)) {
- $value = 'array:' . $k;
- if (isset($v[0][0])) {
- $v = $v[0][0];
- }
- if (isset($v[0])) {
- $v = $v[0];
- }
- }
- if (isset($this->{$api}[$num][$k])) {
- //continue;
- }
- $this->{$api}[$num][$k] = $value;
- $insertId = $this->insertApiDataOne($api, $k, $value, $aid, $id);
- if ($insertId > 0 && is_array($v)) {
-
- $this->insertApiData($api, $v, $aid, $insertId, $num+1);
- }
- }
- }
- private function insertApiDataOne($api, $name, $data, $aid, $id = -1)
- {
- if (is_array($data)) {
- $type = $data[0];
- $desc = $data[1];
- } else {
- $type = 'string';
- if (is_numeric($name)) {
- $type = 'int';
- } elseif (strpos($name, 'id') !== false) {
- $type = 'int';
- }
- $desc = $data;
- }
- if (!is_string($desc)) {
- $desc = '{object}';
- }
- if (strlen($desc) > 100) {
- $desc = '{long}';
- }
- $update['add_api_id'] = $aid;
- $update['add_name'] = $name;
- $update['add_type'] = $type;
- $update['add_desc'] = $desc;
- $update['add_parent_id'] = $id;
- $update['add_desc'] = $desc;
- $one = array
- (
- 'option_parent_id' => $id,
- 'option_api_id' => $aid,
- 'option_name' => $name,
- );
- $info = Dever::db('manage/' . $api)->one($one);
- if (!$info) {
- return Dever::db('manage/' . $api)->insert($update);
- }
- return $info['id'];
- }
- public function showTable($data, $url = '', $api = '')
- {
- $result = '<table border=1 width=100% height=100%>';
- if ($data) {
- $result .= Dever::tbody(array('字段', '类型', '描述'));
- $num = count($data);
- $table = array();
- foreach ($data as $k => $v) {
- if ($v['name'] == '{struct}') {
- $table[$k] = '';
- unset($data[$k]);
- $struct = Dever::db($k)->config['struct'];
- if ($v['desc']) {
- $temp = $v['desc'];
- } else {
- $temp = $struct;
- }
- if ($temp) {
- foreach ($temp as $i) {
- if (isset($struct[$i]) && isset($struct[$i]['type'])) {
- $type = explode('-', $struct[$i]['type']);
- $table[$k] .= Dever::tbody(array($i, $type[0], $struct[$i]['name']));
- }
- }
- if ($v['type']) {
- $data[$v['type']] = array('array/json', $result . $table[$k] . '</table>');
- } else {
- $result .= $table[$k];
- }
- }
- }
- }
- } else {
- $result .= '空';
- }
- $this->table($data, $result, $url, $api);
- return $result;
- }
- private function table($data, &$table, $url = '', $api = '')
- {
- if ($data && is_array($data)) {
- foreach ($data as $k => $v) {
- if (is_array($v['desc'])) {
- $tbody = '<table border=1 width=100% height=100%>';
- $this->table($v['desc'], $tbody) . '</table>';
- $v['desc'] = $tbody;
- }
- if (!$v['desc']) {
- $v['desc'] = '无';
- }
- if (strstr($v['desc'], 'array:')) {
- $v['type'] = 'array';
- //$v['desc'] = str_replace('array:', '', $v['desc']);
- }
- $v['name'] = '<span class="edit" data-col="name" data-url="'.$url.'" data-id="'.$v['id'].'" data-type="'.$api.'" >' . $v['name'] . '</span>';
- $v['type'] = '<span class="edit" data-col="type" data-url="'.$url.'" data-id="'.$v['id'].'" data-type="'.$api.'" >' . $v['type'] . '</span>';
- $v['desc'] = '<span class="edit" data-col="desc" data-url="'.$url.'" data-id="'.$v['id'].'" data-type="'.$api.'" >' . $v['desc'] . '</span>';
- $table .= Dever::tbody(array($v['name'], $v['type'], $v['desc']));
- }
- }
- $table .= '</table>';
- }
- public function push($param = false)
- {
- $param = $param ? $param : json_decode(base64_decode(Dever::input('param')), true);
- $api = explode('_api', $param['api']);
- $api = $api[0];
- $temp = explode('/', $api);
- $project = $temp[0];
- unset($temp[0]);
- $site = implode('/', $temp);
- $request = array();
- foreach ($param['request'] as $k => $v) {
- if (!strpos($k, '/') && !strpos($k, '?') && $k != 'json' && $k != 'callback') {
- $request[$k] = $v;
- }
- }
- $type = 1;
- $this->updateApi($site, $api, $type, $project, $request, $param['response'], 1, false);
- }
- public function update_col_api()
- {
- $table = Dever::input('type');
- $col = Dever::input('col');
- $id = Dever::input('id');
- $value = Dever::input('value');
- $update['set_' . $col] = $value;
- $update['where_id'] = $id;
- Dever::db('manage/' . $table)->update($update);
- }
- public function getHtml($name, $site, $id, $project)
- {
- $one = array
- (
- 'option_api_id' => $id,
- );
- $request = Dever::db('manage/api_request')->all($one);
- $response = Dever::db('manage/api_response')->all($one);
- $html = Dever::db('manage/api')->config['html'];
- $request = $this->showTable($request);
- $response = $this->showTable($response);
- return '接口名称:'.$name.'<br />接口地址:<br />'.Dever::url($site, $project).'<br />'.$html.'请求参数:<br />'.$request.'<br />输出参数:<br />'.$response;
- }
- # 获取日志信息
- public function getLog($tid, $project, $table, $type = 1)
- {
- $where['project'] = $project;
- $where['table'] = $table;
- $where['tid'] = $tid;
- $where['type'] = $type;
- $info = Dever::db('manage/log')->find($where);
- if ($info) {
- $info['info'] = Dever::json_decode($info['info']);
- }
- return $info;
- }
- }
|