当前位置:  开发笔记 > 编程语言 > 正文

RESTful和SOAP Web服务在实践中有何不同?

如何解决《RESTful和SOAPWeb服务在实践中有何不同?》经验,为你挑选了1个好方法。

我正在为PHP应用程序实现Web服务,并试图了解标准Web服务和RESTful Web服务所提供的内容.我的目的是编写包装器代码来抽象出Web服务的详细信息,以便开发人员可以"实例化远程对象"并使用它们.以下是我的想法,或许你们中的一些人可以添加你的经验并扩展这个:

RESTful Web服务

基本上只是"按需提供XML源",因此您可以为客户端应用程序编写包装器代码,以便它可以通过以下方式查询服务器应用程序:

$users = Users::getUsers("state = 'CO'");

这将反过来从远程URL获取XML提要

$ users可以被制作成完整User用户对象的集合,或者

保留为XML,或

变成阵列等

查询脚本("state ='CO'")将在服务器端转换为SQL

RESTful Web服务通常只能从客户端的视图中读取,尽管您可以编写可以使用POST或GET在服务器上进行更改的代码,例如传递加密令牌以确保安全性,例如:

$ users = Users :: addUser($ encryptedTrustToken,'jim',$ encryptedPassword,'James','Taylor');

这将在服务器应用程序上创建一个新用户.

标准Web服务

标准Web服务最终基本上做同样的事情.他们的一个优势是客户可以通过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实现可以做得更多.

将享受听取您的反馈意见,以清理其中的一些云.



1> Marc Gravell..:

它们是不同的模型...... REST是以数据为中心的,其中SOAP是以运营为中心的.即使用SOAP,您往往会有离散操作"SubmitOrder"等; 但是使用REST,您通常会更加关注如何查询数据.

SOAP往往与更复杂的关联(有时是必要的) - REST回到POX等,以及YAGNI.


就.NET而言,像"wsdl.exe"这样的工具将为您提供一个完整的客户端代理库来表示SOAP服务(或者用于WCF服务的"svcutil.exe"):

var someResult = proxy.SubmitOrder(...);

对于REST with .NET,我想ADO.NET数据服务是最明显的玩家.在这里,工具(datasvcutil.exe)将为您提供具有LINQ支持的完整客户端数据上下文.LINQ是.NET相对较新的形成复杂查询的方式.所以像(强/静态类型检查和intellisense):

var qry = from user in ctx.Users
          where user.State == 'CO'
          select user;

(这将转换为ADO.NET数据服务的相应REST语法/从中转换)

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有