[ PROMPT_NODE_24974 ]
moodle-external-api-development
[ SKILL_DOCUMENTATION ]
# Moodle 外部 API 开发
本技能指导您如何遵循 Moodle 的外部 API 框架和编码标准,为 Moodle LMS 创建自定义外部 Web 服务 API。
## 何时使用此技能
- 为 Moodle 插件创建自定义 Web 服务
- 实现用于课程管理的 REST/AJAX 端点
- 构建用于测验操作、用户追踪或报告的 API
- 向外部应用程序公开 Moodle 功能
- 使用 Moodle 开发移动应用后端
## 核心架构模式
Moodle 外部 API 遵循严格的三方法模式:
1. **`execute_parameters()`** - 定义输入参数结构
2. **`execute()`** - 包含业务逻辑
3. **`execute_returns()`** - 定义返回结构
## 分步实现
### 第 1 步:创建外部 API 类文件
**位置**:`/local/yourplugin/classes/external/your_api_name.php`
php
libdir/externallib.php");
use external_api;
use external_function_parameters;
use external_single_structure;
use external_value;
class your_api_name extends external_api {
// 三个必需的方法将放在这里
}
**关键点**:
- 类必须继承 `external_api`
- 命名空间遵循:`local_pluginnameexternal` 或 `mod_modnameexternal`
- 包含安全检查:`defined('MOODLE_INTERNAL') || die();`
- 需要引入 externallib.php 以获取基类
### 第 2 步:定义输入参数
php
public static function execute_parameters() {
return new external_function_parameters([
'userid' => new external_value(PARAM_INT, 'User ID', VALUE_REQUIRED),
'courseid' => new external_value(PARAM_INT, 'Course ID', VALUE_REQUIRED),
'options' => new external_single_structure([
'includedetails' => new external_value(PARAM_BOOL, 'Include details', VALUE_DEFAULT, false),
'limit' => new external_value(PARAM_INT, 'Result limit', VALUE_DEFAULT, 10)
], 'Options', VALUE_OPTIONAL)
]);
}
**常用参数类型**:
- `PARAM_INT` - 整数
- `PARAM_TEXT` - 纯文本(去除 HTML)
- `PARAM_RAW` - 原始文本(不进行清理)
- `PARAM_BOOL` - 布尔值
- `PARAM_FLOAT` - 浮点数
- `PARAM_ALPHANUMEXT` - 包含扩展字符的字母数字
**结构**:
- `external_value` - 单个值
- `external_single_structure` - 带有命名字段的对象
- `external_multiple_structure` - 项目数组
**V