关注更改

通过轮询或 HTTP 通知来获取笔记更新通知


概述

很多应用关注用户的印象笔记帐户,当一个笔记被创建或更新时,应用会采取操作。 Web 应用可以利用印象笔记的 webhook 来收取实时的更改通知。 对于不能使用 webhook 的应用,我们有一些技巧来提高轮询更改的效率。

轮询

如果你的应用需要知道用户的印象笔记帐户内的更改,你可能考虑周期地调用 NoteStore.findNotesMetadata 函数来搜索新的笔记。 findNotes 虽然很强大,但是调用它对于我们的服务器负载很大 - 我们需要加载用户的 Lucene 索引,在他们所有的笔记上进行搜索操作, 访问数据库来取得笔记数据,并通过网络把这些数据发送给你的应用。 如果你在开发一个 web 应用,你应当使用 webhooks 而不是轮询。 如果你必须使用轮询操作,你应当遵循下面的原则。

首先,轮询的间隔不要小于 15 分钟。我们会记录 findNotes 的调用情况,如果我们发现你的应用的轮询过于频繁,我们将临时撤销你的 API key。

每个印象笔记帐户都有一个叫做 updateCount 的变量。这个变量可以告诉你在你上次查看这个帐户之后是否有任何更改。 在你的应用搜索新笔记之前,调用 NoteStore.getSyncState 来检查 updateCount 的值并确定帐户是否有任何更改。这里有个简单的示例:

Webhooks

如果你在开发 web 服务,那么你就不需要进行轮询了。相反,你可以注册 webhook 来接收用户创建或更改笔记的通知。 这些通知是实时的,因此你的应用中的延迟会降低,并且和轮询相比效率会更高。 所有使用你 web 服务的并且拥有有效的 OAuth 认证的用户都会收到这个通知。

通知通过 HTTP GET 请求发送。当你注册了接收通知后,你要提供一个用来接收通知的回调 URL。 当印象笔记用户创建或更改笔记时,用户的数字用户 ID,笔记的 GUID,和通知的原因会组成如下 HTTP 请求:

如果你的服务只关心某些特定的笔记,我们可以在你的 API key 上设置一个过滤器。 此后只当符合过滤器的笔记被创建或发生变化时,通知才会被发送。 例如,如果使用 resource:image/* 过滤器,那么新建的或被更改的笔记至少包含一个图像附件时,通知才会被发送。 这个过滤器时在你的 API key 上配置的,所以它对于所有用户都是相同的。 过滤字符串支持完整的 搜索语法.

Webhooks 也适用于印象笔记企业版。它与普通的 webhooks 有一些不同:

  • 第三方只会收到来自授权过此第三方应用的用户的企业版数据更改的通知。换句话说,如果 Bob 授权了你的应用而 Susan 没有,那么只有当 Bob 创建或更改企业笔记的时候你才会收到通知。
  • 由于企业版的数据变更而产生的通知中包含 business_createbusiness_update 原因代码。
  • 当你接收到新的企业笔记或笔记更新的通知后,可以通过指定用户的企业认证 token 来获取这条笔记,然后连接到相应的企业 NoteStore

如果要注册 webhook,请创建一个开发者支持 ticket 并发送给我们如下信息:你的 API consumer key,你希望通知发送到的回调 URL,和你希望使用的过滤器(可选)。