方法中公开新的API方法HTTP报表API通过创建API模块。Reporting API允许第三方应用程序通过HTTP请求访问分析数据并操作其他数据(如用户或网站)。
Matomo UI使用Reporting API来呈现报表、管理用户等。如果您想向Matomo UI添加一个特性,您可能必须在API中公开一个方法来访问这些数据。由于API是通过HTTP调用的,它允许您从任何地方获取或操作任何与Matomo相关的数据。在这些公开的API方法中,你基本上可以做任何你想做的事情,例如:
要创建一个新的API,请使用Matomo控制台:
。/控制台生成:api
该命令将要求您输入创建的API应该属于的插件的名称。现在应该有一个文件插件/编写MyPlugin / API.php
用一些简单的例子让你开始:
类API扩展\Piwik\Plugin\API{公共函数getAnswerToLife(bool $truth = true): int {if ($truth){返回42;}返回24;}公共函数getExampleReport(string $idSite, string $period, string $date, bool $wonderful = false):数据表{$table =数据表::makeFromSimpleArray(array(array('label' => 'My label 1', ' nb_出访' => '1'),array('label' => 'My label 2', ' nb_出访' => '5'),);返回$表;}}
该文件中的任何公共方法都可以通过Reporting API使用。比如这个方法getAnswerToLife
可以通过这个URL调用:= api方法= MyApiPlugin.getAnswerToLife index . php ?模块
.URL参数方法
是这个类中的插件名称和方法名称的组合。
两个示例方法都定义了一些参数。要将任何值传递给方法的参数,只需在URL中通过名称指定它们。例如…和方法= MyApiPlugin.getExampleReport&idSite = 1期= week&date = today&wonderful = 1
将值传递给方法的参数getExampleReport
.
可以为API方法的参数定义类型提示。如果参数有类型提示,我们的API请求处理器将自动检查所提供的值是否与期望的类型兼容。如果类型不匹配,API将返回相应的错误消息。
API参数通常以URL或请求参数的形式提供,只支持以下类型提示:字符串
,int
,浮动
,保龄球
,数组
.boolean参数将通过匹配自动转换0
,' 0 '
,“假”
而且1
,' 1 '
,“真正的”
如果你的API方法能够为一个参数处理多种类型,你可以不定义类型提示。然后,参数将作为字符串或字符串数组传递(取决于请求参数)。这时需要手动验证和检查参数值。
从早期开始,Matomo自动清除传递给API方法的所有参数常见的::sanitizeInputValues
.这样就可以使用所有输入参数,而不需要过多考虑安全性,因为有风险的内容会自动转义。在Matomo 5中,我们开始弃用这种自动消毒。至少在Matomo 6之前,所有API参数仍将被自动清除。但是现在有可能对某些API类甚至单个API方法禁用这种行为。
要禁用整个API类的自动消毒,只需设置API类的属性autoSanitizeInputParams美元
:
类API扩展\Piwik\Plugin\API {protected $autoSanitizeInputParams = false;
若要仅为单个API方法禁用它,需要添加@unsanitized
到方法文档块:
/** * API方法描述* @参数int $idSite * @未消毒*/公共函数getSomething(int $idSite) {
注意:当使用type的未消毒参数时字符串
或数组
,请确保小心使用这些值。由于它们可能包含可能破坏HTML或SQL语法的内容,请确保在使用时正确地转义这些值。
在API方法中,您可以返回任何布尔值、数字、字符串或数组值。资源或对象不能返回,除非它实现DataTableInterface,例如数据表(Matomo中用于存储分析数据的主要数据结构),DataTable \地图(存储一组数据表)和DataTable \简单(一个数据表,其中每行有两列:标签和值)。
你知道吗?您可以通过附加参数来选择API请求的响应格式CSV格式= JSON XML | | |……
到URL。请查看报告API参考获取更多信息。
数据表vs数组
方法中直接返回数组,您可能想知道getExampleReport
例子吗?通过用数据表包装它,您将能够使用许多特性,如filter_offset
,filter_limit
,filter_sort_column
,showColumns
还有更多。
不要忘记检查用户是否实际具有访问数据或执行操作的权限。如果你不熟悉Matomo的权限和如何检查他们阅读我们用户权限指南。
在Matomo,我们的目标是编写干净的代码。因此,我们建议保持API方法较小(关注点分离)。一个API基本上就像一个控制器:
public函数createLdapUser(int $idSite,字符串$login,字符串$password) {Piwik::checkUserHasAdminAccess($idSite);美元$ this - > checkLogin(登录);美元$ this - > checkPassword(密码);$myModel = new LdapModel();$success = $myModel->createUser($idSite, $login, $password);美元返回成功;}
这不仅易于阅读,还允许您为其创建简单的测试LdapModel
(无需引导整个Matomo层),如果需要,您将能够在其他地方重用它。
例如,你想从另一个插件获取一个现有的报告——比如所有Page url的列表,不要直接调用该方法来请求这个报告:\Piwik\Plugins\Actions\API::getInstance()->getPageUrls($idSite, $period, $date);
.相反,发出一个新的API请求:
$report = \Piwik\API\Request::processRequest('操作。getPageUrls', array('idSite' => $idSite, 'period' => $period, 'date' => $date,));
这有几个优点: