gpt4 book ai didi

rest - 以 REST 方式附加到资源的属性

转载 作者:行者123 更新时间:2023-12-03 12:19:13 24 4
gpt4 key购买 nike

这是对 Updating a value RESTfully with Post 的跟进

如何使用 REST 简单地附加到资源的属性。想象一下,我有 customer.balance 并且 balance 是一个整数。假设我只想告诉服务器将 5 附加到当前余额是什么。我可以安心地做这件事吗?如果是这样,如何?

请记住,客户不知道客户的现有余额,因此它不能只是

  • 获取客户
  • 客户余额 += 5
  • 发帖客户

  • (上述内容也会存在并发问题。)

    最佳答案

    简单,略丑:

    这是我的 answer to your other question 的一个更简单的变体.

    如果您执行以下操作,我认为您仍然处于 REST 的限制范围内。但是,我也很好奇其他人对这种情况的看法,所以我希望听到其他人的意见。

    您的 URI 将是:

    /customer/21/credits

    您将信用资源(可能是 <credit>5</credit> )发布到 URI,然后服务器可以获取客户的余额和 +=它具有提供的值。此外,您可以支持负信用(例如 <credit>-10</credit> );

    请注意 /customer/21/credits不必支持所有方法。仅支持 POST 是完全可以接受的。

    但是,如果积分不是您系统中的真正资源,这会变得有点奇怪。 HTTP spec说:

    If a resource has been created on the origin server, the response SHOULD be 201 (Created) and contain an entity which describes the status of the request and refers to the new resource, and a Location header.



    从技术上讲,您不是在此处创建资源,而是附加到客户的余额(实际上是 系统中所有先前信用额的总和 )。由于您没有保留信用(大概),您将无法真正返回对新“创建”信用资源的引用。您可能可以退还客户的余额,或者 <customer>本身,但这对客户来说有点不直观。这就是为什么我认为将每个信用视为系统中的新资源更容易使用(见下文)。

    我的首选解决方案:

    这是改编自我在您的另一个问题中的回答。在这里,我将尝试从客户端/服务器正在做什么的角度来处理它:
  • 客户:
  • 建立一个新的信用资源:
    <credit>
    <amount>5</amount>
    </credit>
  • 将资源发布到 /customer/21/credits
    在这里发帖的意思是,“将这个新的 <credit> 附加到该客户的 <credit> 列表中。
  • 服务器:
  • 接收到 /customer/21/credits 的 POST
  • 从请求中获取金额和 +=到客户的余额
  • 保存信用及其信息以供日后检索
  • 向客户端发送响应:
    <credit href="/customer/21/credits/credit-id-4321234">
    <amount>5</amount>
    <date>2009-10-16 12:00:23</date>
    <ending-balance>45.03</ending-balance>
    </credit>

  • 这为您提供了以下优势:
  • 以后可以通过 id 访问积分(使用 GET /customer/21/credits/[id])
  • 您拥有完整的信用记录审计跟踪
  • 如果您支持,客户可以通过 id 更新或删除信用(使用 PUT 或 DELETE)
  • 如果您支持,客户可以检索信用的有序列表;例如GET /customer/21/credits可能会返回:
    <credits href="/customer/21/credits">
    <credit href="/customer/21/credits/credit-id-7382134">
    <amount>13</amount>
    ...
    </credit>
    <credit href="/customer/21/credits/credit-id-134u482">
    ...
    </credit>
    ...
    </credits>
  • 有道理,因为客户的余额实际上是应用于该客户的所有信用的最终结果。
  • 关于rest - 以 REST 方式附加到资源的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1575727/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com