REST API 上下文中集合资源原型和存储资源原型之间的确切区别是什么,我一直在阅读这本名为 REST API 设计规则手册的书,但无法理解两者之间的区别。
我可以理解集合是服务器管理的,商店是客户端管理的,但无法理解它们的含义或如何实现,请用简单的方式并用一些示例进行解释。
我可以理解集合是服务器管理的,商店是客户端管理的,但无法理解它们的含义
区别在于:谁可以选择新资源的 URI。
遵循集合原型时,您通常会将文档发布到索引资源,服务器将选择新文档资源的拼写。
借用Rails Routing from the Outside In,要上传照片,客户端将向照片索引发送 POST 请求
POST /photos
...
服务器将为新照片选择 URI 并将该位置发送回客户端。 这通常看起来像是为资源生成一个 id,然后在一致的位置构造一个具有该 id 的 URI(例如,使用 URI 模板)
201 Created
Location: /photos/bf0c4e00-7529-4ef0-958c-db6b18a7facc
另一方面,如果您遵循 store archetype,您通常会让客户端选择 URI(同样,通常是允许客户端选择一个 id,然后按照模板所述构造一个 URI)。
客户端随后将通过提供(新的)表示来“更新”其选择的资源
PUT /photos/c3d4eace-9990-4daa-8bfc-7b58ed532298
...
201 Created
Location: /photos/c3d4eace-9990-4daa-8bfc-7b58ed532298
如何实施
实现此目的的一个简单方法是将 URI 空间映射到磁盘上的目录,并将资源表示写入文件中,文件名可以轻松转换为 URI,反之亦然。 因此,您最终可能会将所有
/photos
放入 /var/www/photos
中。