在hook_xmlrpc()中进行自动的参数类型验证
xmlrpc钩子有两种形式。简单的形式,如例子remotehello.module中所展示的,它简单的将一个外部的方法名映射到一个函数上。在一个更高级的形式中,它描述了方法的方法签名;这里指的是,它返回的是什么XML-RPC类型,以及每一个参数的类型(参看http://www.xmlrpc.com/spec来查看类型列表).下面是remotehello.module的升级版,xmlrpc钩子的形式更复杂一些:
xmlrpc钩子有两种形式。简单的形式,如例子remotehello.module中所展示的,它简单的将一个外部的方法名映射到一个函数上。在一个更高级的形式中,它描述了方法的方法签名;这里指的是,它返回的是什么XML-RPC类型,以及每一个参数的类型(参看http://www.xmlrpc.com/spec来查看类型列表).下面是remotehello.module的升级版,xmlrpc钩子的形式更复杂一些:
xmlrpc钩子描述了由模块所提供的外部XML-RPC方法。在我们的例子中,我们仅提供了一个方法。,所以这里,方法名字为:remoteHello.hello。这是请求者使用的名字,它是任意的。一个好的实践是使用“.“分割的字符串,使用你的模块名作为前半部分,使用一个描述性的动词作为后半部分。
正如在XML-RPC客户端例子中所看到的,Drupal为你做了大部分工作。现在让我们看一个简单的服务器端的例子。你需要做3件事来建立你的服务器:
老葛的Drupal培训班 Think in Drupal
如果你成功的连接到了服务器,尝试从betty.userland.com获取州名,但是却忘记提供州号了,而这个又是必须的参数:
老葛的Drupal培训班 Think in Drupal
前面的代码也适用与HTTP错误,比如当服务器不存在,但是该路径上的web服务不存在时.现在,我们向drupal.org请求该服务, drupal.org指出 http://drupal.org/RPC2不存在:
当与远程的服务器打交道时,经常会出错.例如,你可能会遇到语法错误;服务器可能会挂掉;或者网络连接不通.让我们看看Drupal是如何处理这些情况的.
让我们尝试一个稍微复杂的例子。它仅仅复杂了一点点,因为你不但发送了你所调用的远程方法的名称,而且还包括了一个参数。UserLand软件在站点betty.userland.com运行了一个web服务:它将50个美国的州以字母顺序排列。所以如果你请求第1个州,它返回Alabama。第50个州为Wyoming。方法的名称为examples.getStateName。让我们向它请求列表中的第3个州: