扩展属性

Events resources的字段涵盖与活动相关的大部分常见数据,例如地点、开始时间等,但应用可能需要存储特定于其用例的其他元数据。Calendar API 允许您为活动设置隐藏的键值对,称为 扩展属性。 借助扩展属性,您可以轻松存储活动的特定于应用的数据,而无需使用外部数据库。

公开范围

扩展属性有两种类型:私有属性和共享属性。 共享属性对活动的所有参加者可见且可供其修改,而私有属性是在参加者的本地活动“副本”中设置的。更具体地说,私有属性特定于请求中使用的 calendarIdeventId,而无论请求中使用哪个 calendarId,系统都会显示共享属性。

添加和更新属性

扩展属性是在 Events 资源中设置的,与其他字段一样,可以在 insertupdatepatch请求中设置。 建议使用 patch 请求,因为这样您就可以操作某些属性,而让其他属性保持不变。添加具有相同键的新属性会覆盖具有相同键的所有现有属性。以下示例展示了如何设置私有属性:

PATCH https://www.googleapis.com/calendar/v3/calendars/calendarId/events/eventId
{
  "extendedProperties": {
    "private": {
      "petsAllowed": "yes"
    }
  }
}

删除属性

更新请求中未包含的任何属性都将被删除,但更好的方法是发出 patch 请求,将值设置为 null。以下示例展示了如何删除私有属性:

PATCH https://www.googleapis.com/calendar/v3/calendars/calendarId/events/eventId
{
  "extendedProperties": {
    "private": {
      "petsAllowed": null
    }
  }
}

搜索属性

您可以使用 Events.list请求,根据扩展属性的值搜索活动。 将字段 privateExtendedPropertysharedExtendedProperty 设置为格式为propertyName=value的约束, 该约束分别针对私有属性和共享属性进行搜索。以下示例返回具有私有属性 petsAllowed=yes 的活动:

GET https://www.googleapis.com/calendar/v3/calendars/calendarId/events
    ?privateExtendedProperty=petsAllowed%3Dyes

您可以多次重复这些字段,并且这些约束会通过 OR 运算组合在一起,因此活动只需与其中一个约束匹配即可返回。 以下示例查找具有私有属性 petsAllowed=yesisOutside=yes 的活动:

GET https://www.googleapis.com/calendar/v3/calendars/calendarId/events
    ?privateExtendedProperty=petsAllowed%3Dyes
    &privateExtendedProperty=isOutside%3Dyes

请注意,对私有属性和共享属性的约束会通过 AND 运算组合在一起,因此活动必须与这两组约束都匹配才能返回。 以下示例查找具有私有属性 petsAllowed=yes 和公共属性 createdBy=myApp 的活动:

GET https://www.googleapis.com/calendar/v3/calendars/calendarId/events
    ?privateExtendedProperty=petsAllowed%3Dyes
    &sharedExtendedProperty=createdBy%3DmyApp

限制

  1. 属性键的大小上限为 44 个字符,键较长的属性将被静默舍弃。
  2. 属性值的大小上限为 1024 个字符,值较长的属性将被静默截断。
  3. 一个活动最多可以有 300 个属性,总大小上限为 32KB(键大小 + 值大小)。这 300 个属性包括活动的所有“副本”中的共享属性和私有属性。