假设我想创建一个RESTful接口,我想foo根据它们的ID 使用s.这里没什么新东西:
GET /api/foo1返回一个表示(例如使用JSON)foo1.DELETE /api/foo1删除foo1.等等
现在让我告诉你,"foo"是一个集合类型的东西.所以我希望能够在"foo"中添加"bar":
PUT /api/foo1/bar3补充bar3到foo1.GET /api/foo1/bar3返回表示foo1.DELETE /api/foo1/bar3bar3从中删除foo1.DELETE /api/foo1foo1完全删除.现在的问题仍然是:GET /api/foo1做了什么?它只是返回foo1我在这个问题中最初假设的表示吗?还是它会返回一个条形列表?或者它是否返回一个表示foo1既包括描述,foo1也包括所有包含的栏的列表?
或者应该GET /api/foo1只返回foo1我在开头假设的表示,并要求PROPFIND列出内部的条形图foo1(WebDAV采用的方法)?但是为了保持一致,我是不是必须将所有其他列表类型的功能更改为PROPFIND,直接与所有GET /api/foo1用于列出内容的数千个RESTful教程相矛盾?
经过一番思考,我认为从 RESTful 的角度来看,最好的概念解释是,通常“事物”与其“集合”不是同一件事。因此,虽然在 WebDAV 世界中, adirectory/可能是保存其文件的同一事物,但在 RESTful 世界中,我可能有一个单独的directory/files/子路径来存放所包含的文件。这样我就可以将目录与所保存的文件分开操作。
考虑为包含谷仓的农场使用 RESTful API。端点farm/api/barns/可能会返回谷仓列表,其中之一是farm/api/barns/bigredbarn. 我天真地认为检索farm/api/barns/bigredbarn/将为我提供谷仓中动物的清单,这就是引发这个问题的原因。
但实际上,谷仓里的动物只是大红色谷仓的一方面。它可能包含车辆和干草:
farm/api/barns/bigredbarn/animals/farm/api/barns/bigredbarn/vehicles/farm/api/barns/bigredbarn/haybales/通过这种方法,我所面临的困境就不会出现。
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |