分发访问SOAPWeb服务的插件时的陷阱?

时间:2011-04-15 作者:MikeSchinkel

我想知道what pitfalls (如有?)这里的开发人员遇到了when distributing WordPress plugins 通过the WordPress plugin repository that embed a SOAP client 用于访问SOAP web services 对于关键的插件功能(或通过任何其他存储库广泛分发的任何插件)

(我的假设是,一家发布插件的公司开发插件会更好。)RESTful web services 但我想通过调查其他人的意见来验证这一观点。注意,我问我们自己@EAMann A.related question on Namesake.com.)

我正在把这变成一个社区维基,这样我们就可以捕捉到关于这个主题的所有想法。

2 个回复
SO网友:Dougal Campbell

我不能专门谈论SOAP,但我曾经为一个必须与专有的第三方web服务通信的客户端构建了一个插件(私有)。在本例中,它是一个非RESTful接口,混合使用QueryString和XML POST请求来提交查询(取决于查询类型的复杂性),并以XML返回结果数据。

我构建了PHP类,以帮助将其服务抽象为一个API,我可以更轻松地处理它,并消除它们接口中的不一致性以及它们接受和返回的不同类型的XML文档。此外,通过创建自己的抽象,我希望保护我的代码不受将来更改的影响。例如,如果他们保持组织数据的基本结构不变,但切换到JSON编码,我的大部分业务逻辑将保持不变,我只需要重写用于编码/解码数据的请求和响应片段。

虽然并不是针对您的问题,但我过去使用SOAP的经验大多是负面的。关于SOAP是RPC服务还是文档传输,一直存在着长期的争论。再加上稍微非标准的实现(例如,搜索有关在Microsoft SOAP服务器上使用perl的SOAP::Lite模块的文章)、使用XML名称空间以及其他因素,您很快就会感到沮丧。

不过,我想知道,您的问题是否更具体地与构建客户端和服务器端SOAP部件的人类似?如果我正在构建一个web服务(以及相关的WordPress插件来访问它),那么SOAP肯定不会成为API RPC或数据传输的首选。

SO网友:Andrew Shell

我个人认为连接到SOAP可能很痛苦,特别是如果服务器是Java,但我确实在为客户机开发的自定义插件中做到了这一点。根据您的需求,您可能不必嵌入特殊的SOAP客户端,因为WordPress 3.2放弃了对PHP 4的支持,而PHP 5有一个内置的SOAP客户端(在PHP.net上搜索SoapClient),只需确保在文档中明确说明它需要PHP 5即可。如果您想支持旧版本的PHP,这很好,但我看到的唯一陷阱是与库名称冲突。

例如,我想使用两个插件,一个是URL缩短器,另一个是twitter插件。shortener插件也有一些twitter功能,它们都包含相同的OAuth库。不用说,我现在在重新定义特定的OAuth类时遇到了错误。

解决这个问题的方法最终将是PHP名称空间,但由于我们讨论的是支持PHP 4,所以这是行不通的。您最好的选择是重命名类,使库SoapClient(例如)现在是MyPlugin\\u SoapClient并在任何地方都使用它,或者您可能只想用以下内容包装include语句:

if (!class_exists(\'SoapClient\')) { include \'inc/soapclient.php\'; }
这将有望解决任何冲突问题。

结束

相关推荐