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),
);
可用的身份验证类
MmApiKeyAuthenticationMmHttpBasicAuthenticationMmHttpBearerAuthenticationMmOAuth
访问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,只需键入Mattermost或Mm,您的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,而是将生成的
lib、test和doc文件复制到最终位置。