做 SAP Fiori、SAPUI5 或企业集成接口时,很容易碰到一种看起来非常正常、实际上却很消耗性能的访问方式。页面需要展示销售订单以及对应的行项目,于是客户端先请求销售订单列表,再根据每一个销售订单编号继续请求行项目。订单数量少的时候几乎感觉不到区别,可一旦列表中出现几十甚至几百条订单,浏览器 Network 面板里就会迅速堆出大量 HTTP 请求。这种场景正是 OData$expand最有价值的地方。OData 协议里的$expand用于把导航属性指向的关联实体直接放入当前响应。OASIS 的 OData 规范明确规定,客户端通过$expand指定需要内联返回的关联实体,服务端需要把这些关联内容包含在响应里。OData V4 还允许在$expand内继续使用$select、$filter、$orderby、$top、$skip以及嵌套$expand等查询选项。在 SAP Gateway 的语境里,它并不只是一个让 JSON 层次更漂亮的语法糖。SAP 官方把$expand明确列入 OData 性能最佳实践,并指出,相比连续执行多个单独请求,合理使用$expand可以减少客户端与 SAP Gateway 之间的往返,也可以减少 SAP Gateway 与后端 SAP Business Suite 之间的往返,从而降低网络耗时、Gateway 响应时间以及资源消耗。如果数据