Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RESTful和SOAP Web服务在实践中有什么不同?_Java_.net_Php_Web Services_Nusoap - Fatal编程技术网

Java RESTful和SOAP Web服务在实践中有什么不同?

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'")

我正在为一个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服务

最终,标准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实现做得更多


我很乐意听取您的反馈,以清理其中的一些云。

它们是不同的型号。。。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,因为它是面向资源/数据的,它是一种不同的范式,因此有不同的设计考虑

对于您的情况,如果我理解正确,您希望避免编写包装器代码,并且需要一个能够远程存储对象及其属性的解决方案(并且对开发人员完全隐藏它们)。我真的无法提出更好的解决方案。。嗯,如果其中任何一项能够满足您的要求,请告诉我:

  • (REST/JSON)
  • 如果我误解了你的问题,也请告诉我

    如果我们比较XML-RPC和SOAP,后者将为您提供更好的数据类型处理,对于前者,虽然您将处理更简单的数据类型,但您必须编写一个层或适配器来将它们转换为域对象


    yc

    我不明白这个问题。你不能做什么?你有什么问题?
    var someResult = proxy.SubmitOrder(...);
    
    var qry = from user in ctx.Users
              where user.State == 'CO'
              select user;