Salesforce主流集成方式、特点、适用场景
分4大类:入站API(外部系统调用Salesforce)、出站调用(Salesforce调用外部)、事件驱动集成、数据虚拟化/批量同步;同时标注对应业务场景。
一、入站集成(外部系统/App调用Salesforce,外部拉取/推送数据进SF)
场景:商户App拉取Account、Case;POS推送故障工单进Salesforce。
1. REST API(SObject标准REST)
- 能力:CRUD、SOQL/SOSL查询记录,JSON格式;支持queryMore分页;OAuth鉴权。
- 适用:中小量记录,外部App实时查询/单条读写;外部商户App读取Salesforce数据展示最常用。
- 局限:大量记录消耗API配额;单次返回最多2000条。
- 场景:商户App直接查询商户、工单数据。
2. Apex Custom REST Endpoint(@RestResource自定义Apex接口)
- 能力:自己封装接口,做多对象关联查询、聚合计算、字段裁剪;可在Apex内部做权限校验、日志、过滤;隐藏内部对象模型。
- 适用:不希望外部感知Salesforce内部对象结构;对外提供定制业务接口;屏蔽底层字段改动影响外部App。
✅推荐方案:给商户App提供定制接口,而不是直接开放标准SObject API。
3. Composite API(复合API)
- 能力:一个HTTP请求打包多组CRUD/查询操作;一次请求多条记录,减少API调用计数。
- 适用:一次要做多条记录读写(移动端离线回推数据,百事拉美巡店离线同步就是Composite)。
4. SOAP API
- 能力:XML格式,WSDL;强契约。
- 适用:老系统、企业级遗留集成;新项目优先选REST。
5. Bulk API 2.0(批量异步API)
- 能力:异步大批量加载/查询数据,适合几千、几十万记录;后台Job处理,事后获取结果。
- 适用:ETL、历史全量同步、数据迁移;不适合实时页面查询。
- 场景:夜间把Salesforce商户全量数据同步到外部数据库。
二、出站集成(Salesforce主动调用外部系统)
场景:Salesforce商机签约完成,调用POS接口开通商户账号;Case关闭回调POS更新工单状态。
1. Apex HTTP Callout + Named / External Credentials(命名凭证)
- 能力:Apex发起HTTP调用外部REST/SOAP服务;Named Credentials把地址、鉴权信息放在Setup,代码不硬编码密钥。
- 重要约束:Trigger同步上下文禁止Callout,要放到Queueable异步执行,规避Governor限制。
- 适用:请求‑应答模式,SF做完业务,同步调用外部获取结果。
- 场景:Opportunity Closed‑Won,Queueable Apex调用POS开通商户账号。
最佳实践:全部出站callout使用Named Credentials,密钥不在Apex写死。
三、事件驱动集成(Event‑Driven,解耦、近实时,Fire‑and‑Forget 发后即忘)
适合:一方数据变更,通知另一方;不等待对方返回;抗高并发。
1. Platform Event 平台事件
- 能力:Salesforce事件总线;Apex/Flow/API发布事件;SF内部Trigger/Flow监听;外部系统用Pub/Sub API订阅消费。
- 适用:POS大量高频事件推送(门店激活、设备故障)推送到Salesforce;SF内部监听生成Case/Account;高并发,解耦,避免callout超时风险。
场景:POS产生大量设备、订阅变更事件,发布Platform Event,Salesforce监听生成业务记录。
2. Change Data Capture(CDC变更数据捕获)
- 能力:配置对象,对象发生insert/update/delete/undelete自动产生变更事件;外部Pub/Sub API订阅拿到变更数据。不需要写Apex。
- 适用:Salesforce数据发生变化,外部系统需要同步一份副本到自己数据库;外部App后台同步,不适合强实时UI页面(允许轻微延迟)。
场景:后台同步Account、Case变更到商户App自己数据库,减轻Salesforce实时API压力。
区分Platform Event vs CDC:
- Platform Event:业务自定义事件,你自己定义消息字段;POS上报故障、告警。
- CDC:标准对象变更,当Account/Case记录本身被修改,自动输出变更。
3. Outbound Message(旧的SOAP出站消息)
- 老的声明式功能,仅支持SOAP;新项目不推荐,优先Platform Event。
四、数据虚拟化 & 批量同步模式
Salesforce Connect(外部对象 External Object)
方向:Salesforce读取外部系统数据(注意方向,和岗位反过来)
- 能力:外部系统数据不拷贝进SF;在SF里面通过外部对象虚拟访问外部数据库/OData数据源;可以放到页面、报表。
- 适用:不希望把海量POS订单存储在Salesforce;Salesforce内部人员直接查看POS订单流水,不复制数据进SF存储。
📋选型速查表
| 集成方案 | 数据流 | 核心适用场景 | 业务匹配度 |
|---|---|---|---|
| 标准REST API | 外部→SF | 中小量实时CRUD、查询 | 中;可以用,但优先自定义Apex REST |
| Apex @RestResource | 外部→SF | 对外输出定制业务接口,权限/聚合封装 | ⭐⭐⭐⭐⭐(商户App拉取数据首选) |
| Composite API | 外部→SF | 一次请求多条记录(移动端离线回推) | ⭐⭐⭐(百事巡店离线同步) |
| Bulk API2.0 | 外部↔SF | 大批量ETL全量同步,非实时 | ⭐⭐(夜间全量同步) |
| Apex Callout+Named Cred | SF→外部 | SF主动调用外部API(请求‑应答) | ⭐⭐⭐⭐⭐(SF调用POS开通商户) |
| Platform Event | 双向 | 自定义业务事件、高并发上报(POS故障) | ⭐⭐⭐⭐⭐(POS上报事件进SF) |
| CDC Change Data Capture | SF→外部 | SF记录变更,外部做增量同步副本 | ⭐⭐⭐⭐(后台同步给外部DB) |
| Salesforce Connect | SF→读外部 | SF虚拟查看外部海量数据,不复制存储 | ⭐⭐(SF看POS订单流水,不是外部读SF) |
✨中文面试口述回答(面试官:你会怎么选择Salesforce集成方式)
集成选型首先要看数据流方向、实时性、数据量级、是否需要同步等待返回。
- 如果外部商户App需要实时读取Salesforce做UI展示,优先用Apex自定义REST接口@RestResource;内部做行级共享校验、多对象聚合,屏蔽底层模型;OAuth鉴权;避免直接暴露标准SObject API。
- 如果Salesforce这边业务完成,需要调用外部POS接口做开通商户,用Apex Callout,放到Queueable异步执行,使用Named Credentials托管密钥,不硬编码。
- 如果POS有大量高频事件上报,比如设备故障、订阅状态变更,用Platform Event事件驱动,解耦,规避同步callout超时。
- 如果外部系统不需要毫秒级实时,只是需要同步Salesforce变更到自己数据库,开启CDC做增量同步,降低实时API调用压力。
- 大批量历史数据迁移、夜间全量同步,选择Bulk API 2.0。
🇺🇸英文精简口述(美国技术面试)
I select integration patterns based on data‑flow direction, real‑time requirement and data volume.
For external merchant‑app real‑time UI‑read scenario, I prefer custom Apex @RestResource endpoint. It enforces sharing rules, handles object join and aggregation, and hides internal data model from external consumers.
When Salesforce needs to invoke external POS backend for provisioning merchants, I use Apex callout wrapped inside Queueable, with Named Credentials to manage secrets.
For high‑volume event reporting from POS side, Platform Event provides decoupled event‑driven flow to avoid timeout risk.
If near‑real‑time is acceptable for background sync, Change Data Capture streams record deltas to external database to reduce real‑time API load.
For large‑volume history data loading, Bulk API 2.0 is my choice.
高频追问
Q:Platform Event和CDC怎么选?
Platform Event用于自定义业务事件,业务主动发布消息,比如POS设备告警上报。CDC监听标准/自定义对象本身记录的create/update/delete,适合把Salesforce记录变更同步给外部数据库。
Q:什么时候用Composite vs Bulk API?
Composite适合单次请求批量多条记录,实时场景;Bulk API2.0适合上万以上记录,异步后台作业,不适合前端实时调用。
Q:Apex callout为什么要放Queueable?
Trigger同步上下文不允许HTTP callout;放到Queueable异步执行,规避Governor限制。