本文介绍了一些您可以用来提高应用性能的技巧。在某些情况下,我们会采用其他已实现的 API 中的示例来阐释所介绍的概念,不过,这些思路也同样适用于 Display & Video 360 API。
使用部分资源
提高 API 调用性能的另一种方法是仅请求您感兴趣的那部分数据。这样可以避免应用传输、解析和存储不需要的字段,使应用可以更高效地利用网络、CPU 和内存等资源。
部分响应
默认情况下,处理完请求之后,服务器会发回资源的完整表示形式。为了提高性能,您可以要求服务器仅发送自己真正需要的字段,从而只接收部分响应。
如需请求部分响应,请使用 fields
请求参数来指定您希望返回的字段。对于返回响应数据的任何请求,您都可以使用此参数。
示例
以下示例展示了如何将 fields
参数与 Display & Video 360 API 结合使用。
简单请求:以下 HTTP GET
请求省略了 fields
参数,因而系统会返回完整资源。
GET https://displayvideo.googleapis.com/v4/advertisers?partnerId=1
完整资源响应:完整资源数据包括以下字段以及其他许多字段(为简便起见,此处省略了那些字段)。
200 OK
{
"advertisers": [
{
"name": "advertisers/1",
"advertiserId": "1",
"partnerId": "1",
"displayName": "Example Advertiser 1",
"entityStatus": "ENTITY_STATUS_ACTIVE",
"updateTime": "2019-01-01T00:00:00.000000Z",
"generalConfig": {
"domainUrl": "http://example.com",
"timeZone": "America/New_York",
"currencyCode": "USD",
"address": {
}
},
"adServerConfig": {
"thirdPartyOnlyConfig": {
}
},
"creativeConfig": {
},
"dataAccessConfig": {
"sdfConfig": {
"sdfConfig": {
"version": "VERSION_3_1"
}
}
},
"integrationDetails": {
}
},
{
"name": "advertisers/2",
"advertiserId": "2",
"partnerId": "1",
"displayName": "Example Advertiser 2",
"entityStatus": "ENTITY_STATUS_ACTIVE",
"updateTime": "2019-01-01T00:00:00.000000Z",
"generalConfig": {
"domainUrl": "http://example.com",
"timeZone": "America/New_York",
"currencyCode": "USD",
"address": {
}
},
"adServerConfig": {
"thirdPartyOnlyConfig": {
}
},
"creativeConfig": {
},
"dataAccessConfig": {
"sdfConfig": {
"sdfConfig": {
"version": "VERSION_3_1"
}
}
},
"integrationDetails": {
}
},
...
],
"nextPageToken": "..."
}
对部分响应的请求:以下针对此同一资源的请求使用了 fields
参数,从而大幅减少了所返回的数据量。
GET https://displayvideo.googleapis.com/v4/advertisers?partnerId=1&fields=advertisers(advertiserId,partnerId,displayName)
部分响应:服务器为响应上述请求而发回的响应包含一个简化的 advertisers 数组,该数组仅包含每个广告客户的广告客户 ID、显示名称和合作伙伴 ID 属性(如果有)。
200 OK
{
"advertisers": [
{
"advertiserId": "1",
"partnerId": "1",
"displayName": "Example Advertiser 1"
},
{
"advertiserId": "2",
"partnerId": "1",
"displayName": "Example Advertiser 2"
},
...
]
}
请注意,响应是一个只包含所选字段及其所属父对象的 JSON 对象。
接下来,我们将详细介绍如何设置 fields
参数格式,以及响应中会返回哪些确切内容。
“fields”参数语法摘要
fields
请求参数值的格式大致基于 XPath 语法。下文总结了支持的语法,随后还有更多示例。
使用以逗号分隔的列表来选择多个字段。
使用
a/b
选择嵌套在字段a
内的字段b
;使用a/b/c
选择嵌套在b
内的字段c
。将表达式放在括号“
( )
”内,使用子选择器来请求数组或对象的一组特定子字段。例如:
fields=advertisers(advertiserId,generalConfig/domainUrl)
只会返回 advertisers 数组中每个元素的广告客户 ID 和网域网址。您还可以指定单个子字段,其中fields=advertisers(advertiserId)
等同于fields=advertisers/advertiserId
。
使用 fields 参数的更多示例
以下示例说明了 fields
参数值对响应有何影响。
- 确定您希望返回的字段,或者进行字段选择。
fields
请求参数值是一个以英文逗号分隔的字段列表,并且每个字段均是相对于响应的根来指定的。因此,如果您执行的是list
操作,响应就是一个集合,其中通常包含一组资源。如果您执行的是返回单个资源的操作,则字段是相对于该资源指定的。如果您选择的字段是(或属于)一个数组,则服务器会返回该数组中所有元素的选定部分。下面提供了几个集合级的示例:
示例 效果 advertisers
返回 advertisers
数组中的所有元素,包括每个元素中的所有字段,但不包括其他字段。advertisers,nextPageToken
同时返回 nextPageToken
字段和advertisers
数组中的所有元素。advertisers/advertiserId
仅返回 advertisers
数组中所有元素的advertiserId
。
每当返回嵌套字段时,响应中均会包含所属父对象。父级字段不会包含其他任何子字段(除非已明确选择)。advertisers/generalConfig/domainUrl
返回 generalConfig
对象的domainUrl
字段,该字段本身嵌套在advertisers
数组下。下面提供了一些资源级的示例:
示例 效果 advertiserId
返回所请求资源的 advertiserId
字段。generalConfig/domainUrl
返回所请求资源中 generalConfig
对象的domainUrl
字段。- 使用“子选择”仅请求特定字段的某些部分。
默认情况下,如果您的请求指定了特定字段,则服务器会完整地返回相应的对象或数组元素。您可以指定一个仅包含特定子字段的响应。如下例所示,您可以使用“
( )
”子选择语法来实现此目的。示例 效果 advertisers(advertiserId,generalConfig/domainUrl)
仅返回 advertisers
数组中每个元素的advertiserId
和 generalConfigdomainUrl
值。
处理部分响应
处理完含有 fields
查询参数的有效请求之后,服务器将发回一个 HTTP 200 OK
状态代码以及所请求的数据。如果 fields
查询参数出现错误或因其他原因而无效,服务器将返回一个 HTTP 400 Bad Request
状态代码以及一条错误消息,告知您字段选择出现了什么错误(例如 "Invalid field selection a/b"
)。