我正在为 PHP 应用程序实现 Web 服务,并试图了解标准 Web 服务和 RESTful Web 服务必须提供什么。我的意图是编写包装代码以抽象出 Web 服务细节,以便开发人员可以“实例化远程对象”并使用它们。这是我的想法,也许你们中的一些人可以添加您的经验并扩展它:
RESTful Web 服务
基本上只是“按需提供 XML”,因此例如,您可以为客户端应用程序编写包装器代码,以便它可以以这种方式查询服务器应用程序:
$users = Users::getUsers("state = 'CO'");
- 这将反过来从远程 URL 获取 XML 提要
- $users 可以变成完整用户对象的集合,或者
- 保留为 XML,或
- 变成数组等
- 查询脚本 ("state = 'CO'") 将在服务器端被翻译成 SQL
从客户端的角度来看,RESTful Web 服务通常是只读的,尽管您可以编写可以使用 POST 或 GET 在服务器上进行更改的代码,例如传递加密令牌以确保安全,例如:
$users = Users::addUser($encryptedTrustToken, 'jim',$encryptedPassword, 'James', 'Taylor');
这将在服务器应用程序上创建一个新用户。
标准网络服务
标准的 Web Servcies 最终基本上做同样的事情。他们拥有的一个优势是客户可以通过 WSDL 发现他们的详细信息。但除此之外,如果我想编写允许开发人员远程实例化、编辑和保存对象的包装器代码,我仍然需要实现包装器代码。SOAP 不会为我做任何这些,它可以做到这一点:
$soap = new nusoap_client('http://localhost/test/webservice_user.php?wsdl', true);
$user = $soap->getProxy();
$lastName = $user->lastName();
但如果我想编辑和保存:
$user->setLastName('Jones');
$user->save();
然后我需要例如处理服务器端的所有状态,SOAP 似乎没有为每个客户端在服务器端保存该对象。
也许我正在使用的 PHP SOAP 实现存在限制(nusoap)。也许 Java 和 .NET 实现做得更多。
会很高兴听到您的反馈以清除其中的一些乌云。