Salesforce对象describe返回数据过大,如何获取picklist值等限定数据
方案1:调用单字段专属Describe接口
不需要拉取整个对象的全量元数据,若仅需查询单个字段的picklist值或属性,直接调用单字段的Describe接口即可,接口格式如下:https://[myinstance].salesforce.com/services/data/v51.0/sobjects/Casedata/fields/[目标字段API名称]/describe
该接口仅返回指定字段的元数据内容,数据体积比全对象Describe接口小90%以上。
方案2:复合请求批量查询多个指定字段元数据
如果需要同时获取多个字段的信息,可通过Salesforce复合API将多个单字段Describe请求合并为单次调用,既避免拉取冗余数据,也不会产生多请求的额外开销。请求示例:
{ "allOrNone": false, "compositeRequest": [ { "method": "GET", "url": "/services/data/v51.0/sobjects/Casedata/fields/Status__c/describe", "referenceId": "status_desc" }, { "method": "GET", "url": "/services/data/v51.0/sobjects/Casedata/fields/Type__c/describe", "referenceId": "type_desc" } ] }
方案3:Tooling API查询直接获取picklist值
若仅需要picklist的选项标签、值、启用状态等核心数据,不需要其他字段属性,可直接通过Tooling API的SOQL查询获取,返回数据体积最小,通常仅为几KB:https://[myinstance].salesforce.com/services/data/v51.0/tooling/query?q=SELECT+Label,Value,IsActive+FROM+PicklistValueInfo+WHERE+EntityDefinitionId='Casedata'+AND+FieldDefinitionId='Casedata.你要查询的字段API名'
兜底优化:全量Describe请求开启压缩
如果你的业务场景必须调用全对象的Describe接口,可在请求头中添加Accept-Encoding: gzip,Salesforce接口支持gzip压缩,2.8Mb的原始JSON压缩后通常仅为300-500KB,可大幅降低传输耗时。
内容的提问来源于stack exchange,提问作者Abraham

