java - SOAP url 和 REST url 之间的区别

标签 java web-services rest soap

目前我正在使用 Axis2 制作一些 REST API。我对 SOAP 样式 url 和 REST 样式 url 之间的区别感到困惑。谁能解释一下?

例如,对于像这样用 java 编写的服务器 API:

package cn.edu.xidian;

public class Salary {
    public int getSalary(String name) {
        if ( name.equals("zhangsan") ) {
            return 3000;
        } else if ( name.equals("lisi") ) {
            return 4000;
        } else 
            return 5000;
    }
}

获取此服务的 REST url 如下所示:

http://localhost:8080/axis2/services/SalaryService/getSalary?name=zhangsan

如果我的理解是正确的,这个 url 进入服务器端 API,调用方法 'getSalary',参数 'name' 等于 'zhangsan',然后浏览器中的 RESTful 输出将如下所示:

<ns:getSalaryResponse>
    <ns:return>3000</ns:return>
</ns:getSalaryResponse>

那么 SOAP 样式的 URL 和相关内容会是什么样子呢?

最佳答案

URL 本身不是 SOAPREST,它是一个 URL。 (形容词是 SOAPy 和 RESTful 吗?)

首先,您的 REST 资源示例:

  http://localhost:8080/axis2/services/SalaryService/getSalary?name=zhangsan

看起来您正在通过 HTTP 构建某种类型的 RPC,例如您尝试使用准 REST 结构来实现远程函数调用。许多人不会认为这是好的 REST。

SOAP 是一种在某些传输层上实现的 XML 编码消息传递系统。

SOAP 不限于用于传输的 HTTP,而 REST 是其本质。您可以通过 URL 为 SOAP 传输 HTTP 并根据需要构建这些 URL 的事实是无关紧要的。此外,事实上大多数 SOAP API 可能主要通过 HTTP 实现也是无关紧要的。

REST 是使用 HTTP 动词(PUT、GET、POST 等)和响应代码的概念,因为它们旨在作为访问和控制资源的协议(protocol)。这包括这些资源的创建、修改、删除等。

SOAP url 的结构实际上可能看起来与 REST api 完全一样,但是对于 REST,该结构应该强烈反射(reflect)资源的逻辑结构。您不必完全是 RESTful,但如果不是,您的 REST API 将不会对开发人员友好。 SOAP 不一定需要具有反射(reflect)数据结构的良好 url,因为您可以提供 WSDL,它概述并可以描述您使用的几乎任何 URL 结构可用的 soap 服务。事实上,我见过很多完全可以接受的 SOAP 服务,它们的 URL 似乎随着时间的推移被任意插入,没有反射(reflect)任何类型的结构。

关于java - SOAP url 和 REST url 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413035/

相关文章:

java - 我安装了 OpenJDK,现在我正在安装 Tomcat。 JRE在哪里?

api - 瑞典 Saas 电子商务解决方案,具有良好的 API 并与 Klarna 集成

java - 无法获取我的 Rest Webservices 的输出,并且出现 HTTP 404 异常

javascript - 如何在express JS中正确显示动态页面?

java - Maven 中的 ojdbc jar 问题

java.lang.OutOfMemory错误: Java heap space creating a long list of Myclass

java - Scala 在非常长的字符串上调用 length() 会引发异常 : Maximum String literal length exceeded

java - 在weblogic中部署jar时出错

java - 给定 WSDL 的 Web 服务客户端

.net - Taleo Find Service - Visual Studio 中的 Web 服务引用创建二维数组