我有一个对象层次结构,我需要通过RESTful API公开它,我不确定URL的结构以及返回的内容。我找不到任何最佳做法。
假设我有从动物那里继承来的狗和猫。我需要对猫狗进行CRUD操作;我还希望能够对动物进行一般的手术。
我的第一个想法是做这样的事情:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
问题是/ animals集合现在“不一致”,因为它可以返回并获取结构不完全相同的对象(狗和猫)。集合返回具有不同属性的对象是否被视为“ RESTful”?
另一个解决方案是为每种具体类型创建一个URL,如下所示:
GET /dogs # get all dogs
POST /dogs # create a dog
GET /dogs/123 # get dog 123
GET /cats # get all cats
POST /cats # create a cat
GET /cats/123 # get cat 123
但是现在,猫狗之间的关系已经消失了。如果要取回所有动物,则必须同时查询猫和狗的资源。URL的数量也会随着每种新的动物亚型而增加。
另一个建议是通过添加以下内容来增强第二个解决方案:
GET /animals # get common attributes of all animals
在这种情况下,返回的动物将只包含所有动物共有的属性,而丢弃狗特定和猫特定的属性。这允许检索所有动物,尽管细节较少。每个返回的对象都可以包含指向详细的具体版本的链接。
有什么意见或建议吗?