Java RESTful和SOAP Web服务在实践中有什么不同?
我正在为一个PHP应用程序实现web服务,并试图了解标准web服务和RESTful web服务都提供了什么。 我的意图是编写包装器代码来抽象web服务细节,以便开发人员可以“实例化远程对象”并使用它们。 以下是我的想法,也许你们中的一些人可以添加您的经验并扩展: RESTful Web服务 基本上只是“按需提供XML提要”,因此,例如,您可以为客户端应用程序编写包装器代码,以便它可以通过以下方式查询服务器应用程序:Java RESTful和SOAP Web服务在实践中有什么不同?,java,.net,php,web-services,nusoap,Java,.net,Php,Web Services,Nusoap,我正在为一个PHP应用程序实现web服务,并试图了解标准web服务和RESTful web服务都提供了什么。 我的意图是编写包装器代码来抽象web服务细节,以便开发人员可以“实例化远程对象”并使用它们。 以下是我的想法,也许你们中的一些人可以添加您的经验并扩展: RESTful Web服务 基本上只是“按需提供XML提要”,因此,例如,您可以为客户端应用程序编写包装器代码,以便它可以通过以下方式查询服务器应用程序: $users = Users::getUsers("state = 'CO'")
$users = Users::getUsers("state = 'CO'");
- 这将反过来从远程URL获取XML提要
- $users可以制作成完整用户对象的集合,或者
- 保留为XML,或
- 变成阵列等
- 查询脚本(“state='CO')将在服务器端转换为SQL
- 从客户端的角度来看,RESTful Web服务通常是只读的,尽管您可以编写代码,使用POST或GET在服务器上进行更改,例如传递加密令牌以确保安全,例如: $users=users::addUser($encryptedTrustToken,'jim',$encryptedPassword,'James','Taylor')
$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实现做得更多
我很乐意听取您的反馈,以清理其中的一些云。它们是不同的型号。。。REST以数据为中心,其中as SOAP以操作为中心。i、 e.使用SOAP,您往往会有离散的操作“提交者”,等等;但对于REST,您通常会更加流畅地了解如何查询数据 SOAP也倾向于与更复杂的事物联系在一起(这有时是必要的)——REST又回到了POX,等等
就.NET而言,像“wsdl.exe”这样的工具将为您提供完整的客户端代理库,以表示SOAP服务(或WCF服务的“svcutil.exe”): 对于使用.NET的REST,我想ADO.NET数据服务是最明显的参与者。在这里,工具(datasvcutil.exe)将为您提供具有LINQ支持的完整客户端数据上下文。LINQ是.NET形成复杂查询的相对较新的方法。例如(通过强/静态类型检查和intellisense):
(这将转换为ADO.NET数据服务的适当REST语法)主要区别在于工具 许多高端SOAP堆栈覆盖了从开发人员到几乎完全使用DTO/文档和RPC的大部分SOAP基础设施 REST over HTTP给开发人员带来了更多的负担(协商格式[XML、JSON、HTTPPOST],解析结果[DOM、映射、DTO编组等])
显然,您可以编写一层逻辑,使处理此细节更容易。一些REST框架的出现使这变得更容易,但目前,当您希望使用或消费此类服务时,这仍然是您的待办事项列表中的一项任务。我的反馈是,如果您想要远程状态,您就不要谈论web服务。我不知道有哪种当代模型能处理远程状态。我认为,如果你需要一个遥远的国家,你就只能靠自己了(没有宗教信仰可循)。只要把xml从这里扔到那里,不要介意理论
我必须补充一点,远程状态是邪恶的。如果可以,请避免使用Soap。Soap只是一组由标准组认可的XML模式。它的优势在于它是为互操作性而设计的,并且支持许多企业级功能。任何平台上的Soap都不会提供您想要的操作。您需要设计并实现服务契约来获得这些特性
听起来您想要的远程对象不是Soap或REST特别适合的对象。也许你最好看看。我在重复马克·格雷威尔提到的内容。当人们问我REST(他们通常对SOAP和SOA有想法)时,我会告诉他们REST=ROA,因为它是面向资源/数据的,它是一种不同的范式,因此有不同的设计考虑 对于您的情况,如果我理解正确,您希望避免编写包装器代码,并且需要一个能够远程存储对象及其属性的解决方案(并且对开发人员完全隐藏它们)。我真的无法提出更好的解决方案。。嗯,如果其中任何一项能够满足您的要求,请告诉我:
yc我不明白这个问题。你不能做什么?你有什么问题?
var someResult = proxy.SubmitOrder(...);
var qry = from user in ctx.Users
where user.State == 'CO'
select user;