gpt4 book ai didi

rest - API 的初始化和存在端点

转载 作者:可可西里 更新时间:2023-11-01 17:17:42 25 4
gpt4 key购买 nike

要求

  • 检查报告是否存在的方法
  • 一种初始化新报告的方法(客户不知道该表示)
  • 获取报告的方法

注意:一份报告要么存在,要么不存在,永远不会超过一个

想法1

  • GET/account/{id}/report
    • 404 如果报告不存在
    • 200 如果报告确实存在

但是如何初始化呢? POSTPUT 将空主体发送到端点似乎是错误的(POST 因为我们知道资源在哪里;PUT 因为我们不希望那里有任何东西),但也许这就是我。另一种方法可能是 GET/account/{id}/report/init

想法2

  • GET/account/{id}/report
    • 200 如果报告存在;返回报告
    • 200 如果报告不存在;初始化并返返回告

但是如何检查报告是否存在呢?

问题

我的两种方法在不同方面都有不足之处。在遵守 REST 原则的同时满足要求的适当方法是什么?

最佳答案

What would be an appropriate approach to meeting the requirements while adhering to REST principles?

REST 不关心您对资源标识符使用什么拼写。

有两件事你应该记住。首先,引用申请为REST architectural style是万维网,仅使用 GET 和 POST 就可以正常运行。二、那个caching是那个故事的重要组成部分。

在 HTTP 中,当服务器返回非错误状态代码以响应不安全请求时,这是对客户端(和任何中间组件)的隐式指令,之前缓存的表示应该无效。

因此,我们通常希望将编辑安排为对最重要资源的不安全请求,如果更改成功,则需要刷新这些资源。

那么如果我想获取报告及其元数据?

GET /A3E7205B-6DC6-4685-9133-2759F739BC22

如果我想要没有报告本身的元数据?

HEAD /A3E7205B-6DC6-4685-9133-2759F739BC22

如果我想更改报表

POST /A3E7205B-6DC6-4685-9133-2759F739BC22

PUTPATCHPOST 的有效替代品,具有更具体的语义,因此很适合在那里使用。

从 REST 的角度来看,创建 只是另一种编辑:

A resource can map to the empty set, which allows references to be made to a concept before any realization of that concept exists -- Fielding

但是 POST 的一般灵 active 的一部分是它支持创建具有不同标识符的资源。因此,如果您愿意,可以这样做。

if report doesn't exist; initialize and return report

GET 语义应该是安全的——允许缓存通过预加载资源来改善体验,允许蜘蛛抓取它们,等等。这并不意味着您不能创建某些东西——HTTP 限制了您的语义,而不是您的实现——只是您需要了解其中的含义。

HTTP does not attempt to require the results of a GET to be safe. Whatit does is require that the semantics of the operation be safe, andtherefore it is a fault of the implementation, not the interfaceor the user of that interface, if anything happens as a result thatcauses loss of property -- Fielding 2002

您观察到:

POSTing... an empty body to the endpoint seems wrong

不,很好,真的。您需要仔细考虑其他一些用例(将空主体发布到确实存在的报告中意味着什么?)

但是如果创建新报告实际上是免费的,并且客户不需要了解详细信息呢?然后只需告诉客户端GET 表示,并根据需要创建您需要的内容。

关于rest - API 的初始化和存在端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54327732/

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