【问题标题】:How to convert SOAP methods to restful API?如何将 SOAP 方法转换为 RESTful API?
【发布时间】:2018-05-03 15:49:56
【问题描述】:

我是这个 Rest 服务世界的新手,我有简单的带有名称的 SOAP 服务

withDrawCashFromAccount(int id, int amountToWithDraw) 
depositCashToAccount(int id, int amountToDeposit)

这是不言自明的,这是一个简单的服务,因为管理团队决定迁移到 restful 架构,我面临以下关于如何转换 restful API 中的两种方法的问题

  • 为了更改资源中的单个列,我们是否需要发送 资源的完整 JSON 结构?。

资源名称“帐户”

e.g Json structure:

        id : 1,
        name : "awesome customer",
        Amount : 500
  • 为了有上述两种简单的用例,用户可以 提取现金或用户可以存款,我不知道我该如何设计 休息服务的终点。我可以命名它们吗

    /account/depositCash/id, /account/withdrawCash/id

    • 我还需要考虑上述调用的幂等性质吗?

目前使用spring boot,来自example

【问题讨论】:

  • 如果您遵循 REST 架构,您会为余额资源建模,在该资源上执行的操作将导致存款或取款。 REST 还使用支持传输协议 (HTTP) 与资源进行交互。这些操作的语义定义了可用的工具集。每个操作都有自己的语义,POST 即由服务器实现者自己定义。虽然服务器应该支持客户端生成请求,但如何做到这一点完全取决于您和您的用例。
  • @RomanVottner 任何特定的理由来设置“余额”资源,因为它只有一个与 Account 类似的变量
  • 这完全取决于你如何建模。如果您登录您的在线银行账户,资产负债表可能包括最近的存款或取款,总和为您当前的余额。通过使用 HATEAOS(链接),可以进一步深入研究每笔交易。用户元数据(如姓名、客户编号或其他内容)也可以通过链接到余额资源和类似内容的自己的资源公开。为什么要那样做?因为对不同资源执行操作传达了不同的语义,而且您以后自然会自然地重用资源。

标签: java spring rest soap


【解决方案1】:

您不一定需要发送整个 Account 对象,并且您应该能够为您的端点命名任何您喜欢的名称,只要它们源自相同的基本 URL;这完全取决于您如何配置服务和 POJOS。

例如,使用JAX-RS,您可以使用@Path("path/you/want/here") 注释服务类,以指定该服务中可访问的所有方法的基本路径,然后为每个方法添加更具体的@Path 注释以赋予它们唯一的路径(方法级别 @Path 注释被添加到类级别一的末尾)。您可以使用@GET@POST 等HTTP 动词注释来注释您的公共方法,以指定该方法将采用哪个动词。

在您的 REST 端点方法中,您可以使用 Jackson 将传入的 JSON 反序列化为 POJO,并指定需要哪些属性、如何对它们进行反序列化/序列化等等。只要您不需要这些属性或者您希望它们不总是存在,您可以简单地允许丢失的 POJO 字段反序列化为 null。

【讨论】:

  • 关于如何在 Rest world 中处理交易的任何意见?
  • 取决于你是否想要真正的无国籍。如果是,那么您需要将临时数据(例如,用户购物车)存储在后端的内存或后端缓存中,或者在每个 REST 请求中重新发送相同的数据。如果不是,那么您可以处理会话变量或将信息粘贴在 cookie 中。不过,我不是交易专家,因此请在此评论中保留我的建议,并在做出决定之前进行一些研究。
  • 休息端点方法是什么意思?在这种情况下,如果您没有将其视为资源,它们会是微服务吗?
猜你喜欢
  • 2022-01-16
  • 1970-01-01
  • 2022-06-18
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
相关资源
最近更新 更多