SOAP — Overloading Web Service Methods

DEX455 - Apex Web 服务完全指南:SOAP Web 服务与 Apex REST

📄 第 255 页 🎬 视频课程

课程章节介绍

我们来看一下关于Web服务方法重载的一个小知识点。 在讲Apex开发的时候,大家可能会想到,面向对象编程里,方法重载是很常见的做法,对吧?就是一个类里头,可以有多个名字相同但参数列表不同的方法。但是在Apex里,如果你要把一个方法暴露成Web服务,也就是加上`webservice`关键字,那可就不能这么干了。 为什么呢?这背后其实和SOAP以及WSDL的技术特性有关。SOAP协议和WSDL描述文件,对于方法重载的支持本来就不是很好。所以Apex就干脆做了一个限制:,在同一个类里,所有标记了`webservice`关键字的方法,名字不能重复,。如果你硬要写两个同名的webservice方法,哪怕参数不同,编译器也会直接报错,不让你通过。 那万一咱们的业务里真的需要根据不同的参数来做不同的事,该怎么办呢?很简单,给这些方法取不同的名字就行了。比如原来的`updateRecord(String id)`和`updateRecord(String id, Map fields)`,你可以改成`updateRecordById`和`updateRecordWithFields`。虽然方法名不一样了,但逻辑还是可以复用的。 最后记住,这个限制只针对`webservice`方法哦。普通Apex方法,就是没有加`webservice`关键字的那些,依然可以正常重载,不受任何影响。这样一来,在内部代码里该怎么写还怎么写,只是对外暴露的接口需要多花点心思给方法起个清晰的名字。 这样解释是不是就很好理解啦?

关键词

Apex Salesforce Developer Guide