Mattermost API Dart客户端

这是用Dart实现的Mattermost API客户端。它不是唯一的,但与其他客户端相比具有显著的优势。

另一个名为mattermost_dart的包依赖于dio库,因此也依赖于其他一些库,但我认为库应该具有最少的依赖项,所以这个实现只依赖于http库。

此外,openapi-generator-cli和已发布的Mattermost swagger文档之间存在不兼容之处。我已解决了其中许多问题。请看下面。

功能

该库是Mattermost Client API 4.0.0的完整Dart实现。

入门

安装包

dart pub add mattermost_api

在您的Dart文件中导入包

import 'package:mattermost_api/api.dart';

创建客户端

var mmClient = MattermostApiClient(
  basePath: '$mmBaseUrl/api/v4',
  authentication: MmHttpBearerAuthentication(config.mmToken),
);

可用的身份验证类

  • MmApiKeyAuthentication
  • MmHttpBasicAuthentication
  • MmHttpBearerAuthentication
  • MmOAuth

访问API端点

Mattermost上有许多子API,它们通过MattermostApiClient对象上的getter公开,或者可以单独创建。

进行请求

// using getters on the client instance
MmTeam? team = await mmClient.teams.getTeamByName(myTeamName);
MmChannel? channel = await mmClient.channels.getChannel(myChannelId);

// using the classes directly
var channelApi = MattermostChannelsApi(mmClient)
MmChannel? channel = await channelApi.getChannel(myChannelId);

库中的每个API模型都以Mattermost开头,每个对象类都以Mm开头,因此如果您正在使用IDE,只需键入MattermostMm,您的IDE应该会捕捉到所有可用的内容。

更多详情

已解决的问题

Mattermost swagger json schema错误

此处可用的Mattermost swagger json文档:https://api.mattermost.com/dcf9982f-0c24-4e65-8bcc-112a276758aa在其OpenAPI schema中存在一些错误。我已经修复了它们,我的版本位于此仓库中,名为mattermost-swagger.json

此外,swagger文档在标签(端点)中不一致地大写ldap。代码生成器将它们视为不同的API,但我们只想一个,所以我已经修改了swagger文档,将它们全部改为LDAP

dart代码生成问题

此外,在使用官方openapi-generator-cli(版本6.0)时,自动Dart代码生成存在一些问题

  • 检索用户个人资料图片时允许的下划线查询变量在生成的Dart代码中会解析为空格字符,导致编译失败。
  • 生成的代码有时会尝试返回错误类型的对象。
  • 生成的代码未能正确地将空的OpenAPI object类型识别为Map<dynamic>,而是将其视为Object
  • 生成的代码期望我们希望整个库都自动生成,它会创建一个pubspec.yaml和所有内容。由于自动代码生成存在问题,最好且更安全的方法是将自动生成的代码包装在我们控制的库中。

我通过在此处fork openapi-generator-cli来解决这些问题,以更改Dart代码生成器Java类和模板。此外,我还创建了自己的构建脚本(codegen.py),该脚本执行以下操作:

  • 使用我的自定义构建的openapi-generator-cli和我的新模板(在此仓库的openapi_mattermost_templates目录下)处理swagger json。
  • 在生成的代码中进行一些额外的替换
  • 忽略生成的pubspec,而是将生成的libtestdoc文件复制到最终位置。

GitHub

查看 Github