前言
前后端分离服务模式下,联调成本以及沟通成本变高,如何提升客户端调用服务体验成主要因素。
- 需求变更频繁,API 无法每次都根据需求更新至最新
- 适应多端,各端需要的响应返回都不一样,不可能为每个端定制 API 响应
- 优化 API 响应时间,避免不必要的 Format 查询操作
- 解决复杂冗余的 API 响应
业务场景中获取客户列表:
1 | { |
如何自定义 API 响应
API 调用函数可通过字段掩码的方式列出请求应返回或更新的字段。 使用字段掩码可使 API 避免执行不必要的工作,从而提升性能。 在 Slides API 中,读取和更新方法都会用到 字段掩码。
使用字段掩码进行读取
Request
1 | https://www.googleapis.com/demo/v1?key=YOUR-API-KEY&fields=kind,items(title,characteristics/length) |
Response
1 | { |
使用字段掩码进行更新
有时候,您只需要更新对象中的特定字段,而其他字段保持不变。 更新操作中的请求可使用字段掩码通知 API 正在更改哪些字段。此更新请求会忽略未在字段掩码中指定的任何字段,这些字段将保留各自的当前值。
您还可以取消设置字段,取消方法是,在更新的消息中不指定该字段,但将它添加到掩码。 这将清除该字段以前具有的任何值。
更新字段掩码的语法与读取字段掩码的语法相同。 此外,可将 * 字段掩码视作通配符,是一种简写形式,用于表示消息中的所有字段。
以下示例使用 updateShapeProperties
请求将形状的颜色填充更改为 DARK1 主题背景色,并取消设置形状的轮廓:Request
1 | PUT https://slides.googleapis.com/v1/presentations/presentationId:batchUpdate |
1 | { |
Field Mask 字段参数语法摘要
fields 请求参数值的格式基于 XPath 语法。支持的语法总结如下,以下部分提供了其他示例。
- 使用逗号分隔列表选择多个字段。
使用
a/b
选择字段b
嵌套在字段内a
; 用于a/b/c
选择c
嵌套在其中的字段b
。
例外:对于使用“数据”包装器的API响应,其中响应嵌套在data看起来像的对象中data: { ... }
,请不要data
在fields
规范中包含“ ” 。包含具有字段规范的数据对象data/a/b
会导致错误。相反,只需使用fields
类似的规范a/b
。使用子选择器通过将表达式放在括号“ ( )”中来请求一组数组或对象的特定子字段。
例如:fields=items(id,author/email)
仅返回items
数组中每个元素的项ID和作者的电子邮件。您还可以指定单个子字段,其中fields=items(id)
等效于fields=items/id
。如果需要,请在字段选择中使用通配符。
例如:fields=items/pagemap/*
选择页面映射中的所有对象。
示例
例子 | 影响 |
---|---|
items | 返回items数组中的所有元素,包括每个元素中的所有字段,但不包含其他字段 |
etag,items | 返回etagitems数组中的字段和所有元素 |
items/title | 仅返回数组中 title 字段。每当返回嵌套字段时,响应都包含封闭的父对象。除非明确选择父字段,否则父字段不包括任何其他子字段。 |
context/facets/label | 仅返回数组的label所有成员的字段,该facets数组本身嵌套在context对象下。 |
items/pagemap/*/title | 对于items数组中的每个元素,仅返回作为子项title的所有对象的字段(如果存在)pagemap。 |
应用实战
- 基础轮子:JSON-MASK
- KOA2.X: koa-json-mask
- KOA1.X: koa1-json-mask
v1.5.2