gpt4 book ai didi

http - REST API 中 "active"资源的概念

转载 作者:可可西里 更新时间:2023-11-01 16:28:34 26 4
gpt4 key购买 nike

我正在开发一个 REST API,其中可以将特定资源指定为“事件”。为了说明这一点,这里有一个我想要实现的简单示例:

假设我有一个代表书籍集合的 URI:/books

给定的书具有 /books/{id} 形式的规范 URI。

我有另一个 URI,它提供了指向事件书籍的指针:/books/active。这将简单地发送一个 HTTP 303,引用事件图书的规范 URI。

允许客户端同时更新事件图书的最佳方法是什么?我应该允许客户在 /books/active 上发出 PUT 指定事件书籍的规范 URI,还是有另一种普遍接受的模式来做这种事情? (对我来说,客户端会发出发送规范 URI 而不是资源的实际表示的 PUT 似乎很奇怪。)

更新:一次只能激活一本书(互斥),所以我认为将激活标志设为书本身的属性没有意义,因为那样会暗示不止一本书可以将值设置为 true。

最佳答案

通过允许类似 PUT/books/active 的方式将状态构建到您的 URI 中是一个坏主意。它完全破坏了服务器提供足够缓存的能力并且一直是called out as an anti-pattern蒂姆斯托克斯。

RESTful 系统中的 URI 应该唯一标识资源。虽然资源的表示可能会改变(并且资源的状态可能会改变),但绝不能使用相同的 URI 来指向不同的资源。这样做违背了 GET 和 PUT 等方法的预期语义。

在您的例子中,简单地在图书集合中包含一个查询参数有什么问题?例如,GET/books?state=active。这将返回所有事件书籍的集合(可能始终是 1 本书,但如果将来发生变化怎么办?)您可以从那里向下钻取并 PUT 到规范 URI。

更好的是,建立一个链接关系体系结构,并在书籍集合的“self”链接旁边简单地包含一个“active-book”关系。这样您的客户甚至不需要知道您的 URL 约定;它可以简单地跟随服务器提供的链接。

关于http - REST API 中 "active"资源的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19969803/

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