【问题标题】:Using SOAP to expose CRUD operations使用 SOAP 公开 CRUD 操作
【发布时间】:2008-10-09 13:49:55
【问题描述】:

通过 SOAP Web 服务公开 CRUD 操作是个坏主意吗?我的直觉告诉我,这并不是最不重要的,因为进行数据库调用的开销可能很大。我正在努力寻找支持/反对这种(反)模式的文档,所以我想知道是否有人可以向我指出一些文档或对此事有意见。

另外,如果有人在设计肥皂服务时知道最佳实践(和/或相关文档),那就太好了。

以下是 Web 服务外观的示例:

  • 创建
  • 删除
  • 执行
  • 获取
  • 更新

下面是实现的样子:

[WebMethod]
public byte[] Fetch(byte[] requestData)
{
    SelectRequest request = (SelectRequest)Deserialize(requestData);

    DbManager crudManager = new DbManager();
    object result = crudManager.Select(request.ObjectType, request.Criteria);

    return Serialize(result);
}

【问题讨论】:

    标签: soap crud


    【解决方案1】:

    如果您想以 RESTful 方式使用 SOAP,那么有一个有趣的标准,WS-Transfer;它提供松散耦合的 CRUD 端点;您可以从中检查消息并相应地对您的实体采取行动。

    然后,您可以在顶部添加任何您想要的东西,WS-Secure、WS-Reliable 消息传递等等。

    【讨论】:

    【解决方案2】:

    我认为发布一个将 CRUD 操作公开给匿名的公共“用户”的 SOAP 服务将是一个特别糟糕的主意。但是,如果您可以限制这些警告中的一项或两项,那么我认为它没有任何问题(而且我已经多次实施此类服务)。

    • 除了执行操作所需的任何方法参数之外,您还可以要求在处理请求之前有效验证发起者的用户名和密码参数:可以通过返回SOAP 异常。如果您特别偏执,您可以选择通过 SSL 运行服务

    • 您可以让处理发送和接收请求的服务器解决方案基于 IP 进行过滤,只允许来自已批准地址列表的请求。

    是的,通过 SOAP 运行请求存在开销(与公开直接数据库访问相反) - 即将请求包装到 HTTP 请求、打开套接字并发送它的处理时间(在接收端则相反)并且再次用于响应) - 但是,它确实有优势。

    Java(虽然是 NetBeans IDE)和 .Net(通过 VS)都支持将 Web 服务消费到项目/解决方案中——这样做的最大好处是远程服务上的对象/结构会自动转换为本地对象消费应用程序,非常方便。

    【讨论】:

      【解决方案3】:

      如果您只想通过网络进行 CRUD,我会考虑一些不同的技术来执行 REST 而不是使用 WS*。 SQL Data Services(以前的 Astoria 项目)实际上可能是一个不错的选择。

      【讨论】:

      • 但是 REST 没有提供 SOAP 的某些优势、可扩展的安全性、可靠的消息传递、回复攻击、WS 寻址等。有时 REST 是不够的。
      • 有时这还不够,尤其是在可靠消息传递领域。我会争论安全性,因为如果需要,您可以在 REST 之上使用标准 HTTP 安全模型。如果您已经尝试成为 RESTful,那么通常就足够了。 REST 是这个人可能喜欢的替代方案。
      【解决方案4】:

      通过 SOAP Web 服务本身公开 CRUD 操作并没有错。

      您显然会发现很多此类服务的示例。

      但是,根据您的特定要求,您可能会发现使用 SOAP 对您来说开销太大,或者您最好使用 JSON/AJAX 等。

      所以我相信,除非您提供有关您的特定详细信息的其他详细信息,否则您的问题没有好的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-28
        • 2011-03-15
        • 2015-06-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-03
        • 2015-03-28
        • 1970-01-01
        相关资源
        最近更新 更多