我正在学习 REST 原则,但我对使用复杂资源有疑问。
假设我们有两个资源,Foo 和 Bar,对于每个 Foo,我必须有一个 Bar。我想使用我的 API 让开发人员清楚地了解 bar 从 foo 的依赖关系,所以:
1) 我将使用从 Foo 实例到 Bar 实例的链接,反之亦然
GET /foos/1
Foo: {
'name': 'Foo instance',
'rel_bar': '/foos/1/bar'
}
GET /foos/1/bar
Bar: {
'name': 'Bar instance',
'rel_foo': '/foos/1',
}
2) 我将使用一个 URI 模板来显示从 Foo 到 Bar 的依赖关系(这仅适用于人类,因为 URI 对于 REST 应该是不透明的)。
/foos --> Foo resource collection
/foos/{foo_id} --> An instance of a Foo resource
/foos/{foo_id}/bar --> The bar instance associated to the foo instance foo_id
所以再一次,没有相应的 foo 就没有 bar。
现在我想创建一个 Foo 资源。
POST /foos
{
'name': 'Yet again another foo instance',
}
并让服务器创建对应的 Bar 默认(或空)资源,这样下一次读取就会给出:
GET /foos/2
{
'name': 'Yet again another foo instance',
'rel_bar': '/foos/2/bar'
}
和...
GET /foos/2/bar
{
'name': null, --> Let's say that null is the default value.
'rel_foo': '/foos/2/bar'
}
'RESTfully 正确' 这样做吗?我的担忧是:
- 让服务器自动创建相关资源是否正确?或者我应该分两步拆分 Bar 和 Foo 的创建?
- POST 一个表示(只是“name”属性)并返回一个不同的表示(“name”和分配的“rel_foo”)是正确的。
我个人的想法是,既然 Bar 没有 Foo 就没有意义,可能是的,我应该让服务器来创建它。
任何的想法?