2019独角兽企业重金招聘Python工程师标准>>>

前段时间给自己Discuz!x3.2论坛开发客户端,自己就研究了下discuz的api的接口和流程,记录下一些重要的点。

api的入口文件,为根目录下的api.php,代码如下:

<?php
define('IN_API', true);//定义api标识
define('CURSCRIPT', 'api');//定义CURSCRIPT常量
$modarray = array('js' => 'javascript/javascript', 'ad' => 'javascript/advertisement');
$mod = !empty($_GET['mod']) ? $_GET['mod'] : '';
if(empty($mod) || !in_array($mod, array('js', 'ad'))) {exit('Access Denied');
}
require_once './api/'.$modarray[$mod].'.php';//包含对应php文件
function loadcore() {global $_G;require_once './source/class/class_core.php';$discuz = C::app();$discuz->init_cron = false;$discuz->init_session = false;$discuz->init();
}
?>

该文件最后包含根目录下api/mobile/下的文件,源码中该文件夹里只有一个index.php文件:

<?php
if(!empty($_SERVER['QUERY_STRING'])) {$plugin = !empty($_GET['oem']) ? 'mobileoem' : 'mobile';$dir = '../../source/plugin/'.$plugin.'/';chdir($dir);if((isset($_GET['check']) && $_GET['check'] == 'check' || $_SERVER['QUERY_STRING'] == 'check') && is_file('check.php')) {require_once 'check.php';} elseif(is_file('mobile.php')) {require_once 'mobile.php';}
}
?>

可以看出,是想包含/source/plugin/mobile/mobile.php的逻辑,所以可以索性直接在api.php中包含mobile的逻辑即可,修改如下:

<?php
define('IN_API', true);
define('CURSCRIPT', 'api');
$module = !empty($_GET['module']) ? $_GET['module'] : '';
if(empty($module)) {exit('Access Denied');
}
chdir('source/plugin/mobile/');
if((isset($_GET['check']) && $_GET['check'] == 'check' || $_SERVER['QUERY_STRING'] == 'check') && is_file('check.php')) {require_once 'check.php';
} elseif(is_file('mobile.php')) {require_once 'mobile.php';
}
function loadcore() {global $_G;require_once './source/class/class_core.php';$discuz = C::app();$discuz->init_cron = false;$discuz->init_session = false;$discuz->init();
}
?>

如果请求包含了check,则包含check.php代码,否则直接包含mobile.php的逻辑,即客户端的处理逻辑。

转载于:https://my.oschina.net/u/1792865/blog/376227

Discuz!客户端api开发(一)相关推荐

  1. 生成用于ASP.NET Web API的C#客户端API

    目录 介绍 主要特征 主要好处 背景 推定(Presumptions) 使用代码 步骤0:将NuGet软件包WebApiClientGen安装到Web MVC/API项目 步骤1:建立.NET Cli ...

  2. Discuz 二次开发 (一) 目录结构和运行逻辑

    Discuz 二次开发 (一) 目录结构和运行逻辑 目录结构 DISCUZ使用自己的框架,与现在主流的web框架不同,DISCUZ没有路由表,他的路由是由入口文件来实现的. api uc.php UC ...

  3. 谈谈前后端分离实践中如何提升RESTful API开发效率

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取推荐书籍 来源:33h.co/edZR 团队内部RestAPI开发采用设计驱 ...

  4. 【Go API 开发实战 2】RESTful API 介绍

    RESTful API 介绍 API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数或者接口,目的是提供应用程序与开发人员基于某软件或硬件得 ...

  5. 【Go API 开发实战 3】API 流程和代码结构

    API 流程和代码结构 为了使读者在开始实战之前对 API 开发有个整体的了解,这里选择了两个流程来介绍: HTTP API 服务器启动流程 HTTP 请求处理流程 本小节也提前给出了程序代码结构图, ...

  6. java api 开发_Java开发人员应该知道的前20个库和API

    java api 开发 优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解,包括JDK和第三方库. 我花了很多时间来学习API,尤其是在阅读了Effective Java 3rd Edit ...

  7. specs.4.8.gz_使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试

    specs.4.8.gz 毫无疑问, JAX-RS是一项杰出的技术. 即将发布的规范JAX-RS 2.0带来了更多的强大功能,尤其是在客户端API方面. 今天的帖子的主题是JAX-RS服务的集成测试. ...

  8. mvvm 后端_ZK实际应用:MVVM –与ZK客户端API一起使用

    mvvm 后端 在以前的文章中,我们已经使用ZK的MVVM实现了以下功能: 将数据加载到表中 使用表单绑定保存数据 删除条目并以编程方式更新视图 ZK MVVM和ZK MVC实现方式之间的主要区别是, ...

  9. 使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试

    毫无疑问, JAX-RS是一项杰出的技术. 即将发布的规范JAX-RS 2.0带来了更多的强大功能,尤其是在客户端API方面. 今天的帖子的主题是JAX-RS服务的集成测试. 有很多出色的测试框架,例 ...

  10. ZK实际应用:MVVM –与ZK客户端API一起使用

    在之前的文章中,我们使用ZK的MVVM实现了以下功能: 将数据加载到表中 使用表单绑定保存数据 删除条目并以编程方式更新视图 ZK MVVM和ZK MVC实现方式之间的主要区别是,我们不直接在cont ...

最新文章

  1. linux 命令自动提示错误信息,Linux基础命令---sar显示系统活动信息
  2. 明明两次返回的组件中的props不一致,为什么dom不重新渲染(react相关)
  3. .net core 下的分布式事务锁
  4. 管理者和领导者的区别_如何赢得领导者的尊重
  5. 解封装(四):avformat_find_stream_info探测获取封装上下文并打印
  6. Page Cache引起的业务问题处理
  7. PDF转码html有乱码,PDF转换成为Word内容出现乱码怎么办
  8. 开发一款APP软件,需要哪些技术支持呢?
  9. 【思维题】Bazinga
  10. 编译php7.1.4出现 undefined reference to isfinite
  11. matlab 线性回归 regress
  12. FSL之bet颅骨剥离
  13. iOS 应用信息、手机设备信息、网络信息、权限信息、GPS、网络信息、存储信息、屏幕信息、传感器信息、手机卡信息等信息获取工具
  14. 死链提交为什么不能提交 html文件,如何正确使用死链提交工具
  15. IIS的配置以及网站的添加
  16. 计算机网络 第3章 作业1
  17. argument的理解
  18. 技术前沿与经典文章16:历史上54位伟大物理学家、科学家的专属LOGO(二)
  19. Unity ShaderGraph 负片效果
  20. html预览dwg文件,大佬救命!有关dwg文件预览的问题

热门文章

  1. Silverlight的依赖属性与附加属性(四)
  2. 第九次作业(杨辉三角)
  3. 基于gdal的格网插值
  4. nodemcu http get无法使用IP的问题
  5. Light oj 1233 - Coin Change (III) (背包优化)
  6. 制作stick侧边栏导航效果
  7. pingback协议与traceback协议的区别
  8. spring mvc 自定义编辑器
  9. Fragment生命周期(转)
  10. PeekMessage和GetMessage的区别