flutter - 如何在 Dart 中使用 Google Calendar API 批量插入事件列表?
问题描述
问题陈述
作为开发人员,我的要求是通过一次调用在 Google 日历中插入事件列表。
为什么是批处理?
正如这里提到的,它有助于减少网络开销并提高性能。
当前情景
使用googleapis包,我只能执行单个插入操作,如下面的片段所示:
var eventResponse = await _calendarApi.events
.insert(event, calendarId, sendUpdates: 'all');
从开发的角度来看,多次调用此方法并不是一种有效的方法。此外,创建一个包含插入方法的数组Future
并用于Future.wait()
等待所有插入调用被执行,这将是一个坏主意,请参见下面的代码片段。
Future<List<Event> insertEvents(List<Event> events) async {
var _calendarApi = CalendarApi(_authClient);
List<Future<Event>> _futureEvents = [];
for (int i = 0; i < events.length; i++) {
_futureEvents.add(_calendarApi.events.insert(events[i], calendarId));
}
var _eventResponse =
await Future.wait(_futureEvents).catchError((e) => print(e));
return _eventResponse;
}
根据官方Google Blog,没有办法在 dart 中执行批处理操作。
有谁知道这个问题的更好的乐观解决方案?
解决方案
如果您查看 Google 日历 api 文档中的events.insert,您会注意到它声明。
创建一个事件。
但是,可以选择使用批处理端点。您应该知道,批处理唯一可以为您节省的是来回的 HTTP 调用。批处理中的每个调用仍然计入您的配额,它不计入您的配额的单个请求。单个批处理请求中的调用次数限制为 50 个。
问题:根据官方谷歌博客,没有办法在 dart 中执行批处理操作。
如果您查看批处理指南,它会显示如何使用 HTTP 构建批处理请求。我会惊讶地发现你不能用颤振来做到这一点,而颤振能够发出 HTTP 请求。我也找不到任何让它工作的人。这可能只是意味着没有人愿意尝试,或者他们只是没有发布结果。
实际上,批处理博客文章指出 Dart 客户端库不支持批处理
Google API Dart 客户端库不支持这些功能。
这绝不意味着它根本不可能,它只是意味着你必须自己从头开始编写代码。
这值得么。
同样,除了 HTTP 请求发送限制之外,使用批处理几乎没有优势。您将需要决定是否值得您花时间尝试让它工作。IMO 不是,我已经使用这些 API 超过 11 年,我从未发现批处理非常稳定或值得它引起的恶化。
通过批处理,您往往会遇到更多的配额泛滥错误,因为您一次发送给许多请求的服务器内容,即使一次发送 5 个,在我的经验中也会导致泛滥错误,然后您必须返回并检查哪些是成功的再次发送。
推荐阅读
- .net-core - 如何将控制台应用程序发布为构建步骤?
- m4 - 有没有办法使用 m4 从包含的文件中包含一部分行?
- java - 刷新值在取自 java 类的 jsp 文件中
- javascript - 如何使用 FastAPI 为跨域请求设置 cookie
- html - 如何使用 Angular 9 中的 Enter 键触发函数
- c++ - 在 Makefile 中包含其他目录
- ruby - 如何在 rspec 链接匹配器中检查“数据方法”
- typescript - 为什么我的打字稿导入没有与 sinon 存根
- javascript - 由于 CORS 政策,Google Sheets JSON API 未能获取
- javascript - TypeError:无法读取未定义的属性“长度” - JavaScript 和 HTML