gggeek / ggwebservices
增强/改进了eZ Publish的本地功能,使其能够作为web服务服务器或客户端工作,并额外提供了一个可视化的web服务调试器。
Requires
Requires (Dev)
Suggests
- ext-json: Needed to support JSON-RPC calls
- ext-soap: Needed to support SOAP calls
- ext-xmlrpc: Needed to support XML-RPC calls
README
一个扩展,用于增强/改进eZ Publish的本地功能,使其可以作为
- web服务服务器
- web服务客户端
并提供一个可视化的web服务调试器
功能
允许轻松使用JSONRPC、XMLRPC和SOAP协议或REST方案调用远程服务器(无论是PHP代码还是模板中)
允许将现有功能作为JSONRPC或XMLRPC、REST和(比eZ本地更好的)SOAP web服务公开,类似于在任意eZ Publish安装中已可以使用SOAP和eZJSCore完成的工作
允许将功能作为web服务公开,而不管客户端使用的协议是什么 - 无需重复代码
提供一个代理模块,允许由eZ Publish服务器提供的javascript代码执行跨域web服务调用(无需使用jsonp或html技巧),甚至跨协议调用
通过提供完整的图形界面进行调试,允许轻松调试web服务调用
在SOAP调用中增加了对WSDL的支持(服务器端和客户端)
改进现有的http客户端,增加更多功能,例如支持更多的身份验证方案、压缩请求等...
允许使用JSONRPC或XMLRPC(最终可能是SOAP)通过ezjscore扩展API调用的函数
保持与现有eZP SOAP类的相同API,以实现最大互操作性
还有更多...
先决条件
- PHP 5 / eZP 4.0+
- 要执行/接收jsonrpc调用,需要php JSON扩展
- 要执行/接收rest调用,需要php SIMPLEXML或JSON扩展
- 要执行/接收xmlrpc调用,需要php XMLRPC扩展
- 要使用wsdl描述调用远程服务,需要php SOAP扩展
- 要集成ezjscore扩展,需要eZP 4.2(以及当然ezjscore扩展)
- 要使用集成的javascript库通过ajax调用服务器本身,建议使用ezjscore扩展。任何其他xmlrpc/jsorpc的javascript库也可以。
- 要从通过标准会话机制(如ajax调用)认证的用户接收soap/xmlrpc/jsonrpc/rest+post调用,必须禁用ezformtoken扩展
基础知识
服务器(eZPublish公开web服务)
- 要接收xmlrpc、jsonrpc或'rest'调用,您需要
- 修改
wsproviders.ini
中的配置,以及可能修改site.ini.append.php
- 创建一个文件
extension/<xxx>/<jsonrpc|xmlrpc|rest>/initialize.php
,其中包含要作为web服务公开的PHP代码 - 通过管理界面和/或配置设置管理对公开服务的访问控制
- 修改
客户端(eZPublish访问由其他系统公开的web服务)
- 每个必须从eZ Publish服务器本身访问的远程web服务服务器都必须在
wsproviders.ini
中定义 - 要从模板中调用远程web服务,请使用模板获取函数
fetch( 'webservices', 'call', hash( paramname, value, ... ) )
请记住,对于执行web服务调用的节点模板,在需要的地方禁用视图缓存 - 要从PHP代码中调用远程web服务,请使用
ggeZWebServicesClient::call( $server, $metod, $params=array(), $options=array() );
有关扩展的更多使用信息,请参阅doc/目录。
已知限制
- 对WSDL的支持有限,对SOAP 1.2的支持也是如此
- JSON-RPC 支持(仅限)1.0 版本,不支持 2.0 版本。
- WebSocket 客户端不支持自动 cookie 管理。
- WebSocket 客户端不支持 OAuth 认证。
- 代理视图通过暴露 xmlrpc+jsonrpc API 来工作。这意味着它不能用来模拟 SOAP/REST 调用的丰富语义。例如,目前它不能用来向上游 REST Web 服务发送 POST 调用。
- REST 支持并不完美,因为该扩展是基于 RPC 语义(调用一个 方法,该方法接收一个 参数哈希)。目前
- 对于 REST 客户端,参数将被转换为查询字符串或 HTTP 请求有效负载,而不是 URL 的斜杠分隔部分。
- 对于 REST 服务器,不支持斜杠分隔的参数或复杂的路由规则。
- 还有很多其他方面:阅读 doc/todo 获取可能改进的详细列表。
常见问题解答(FAQ)
问题:我如何在不发疯的情况下调试 Web 服务?
答案1:你真幸运,因为这个扩展在标准管理界面中提供了一个很好的图形调试器。
答案2:当 DebugSettings/DebugOutput 和 TemplateSettings/DevelopmentMode 都被启用时,fetch 函数发送的请求将作为标准调试输出的一部分显示。
答案3:通过启用日志记录!wsproviders.ini 中有一个 ini 设置用于控制用于 Web 服务的日志文件的详细程度:var//log/webservices.log
问题:这个扩展的安全性如何?
答案:主要作者以自己是一个极其注重安全的开发者而自豪——他在臭名昭著的“lupii 蠕虫”事件中学到了很多关于 Web 服务和安全的东西,后来甚至短暂地担任过安全顾问。话虽如此,代码库现在已经相当大,提供的功能数量令人惊叹。没有任何保证,无论是隐含的还是明确的,使用它不会将您的数据或客户的数据暴露给欺诈行为。如果您对此有问题,请赞助一个安全审计。