最佳答案
我有一个对象层次结构,我需要通过一个 RESTful API 公开,我不知道我的 URL 应该如何结构化,他们应该返回什么。我找不到任何最佳实践。
假设我有猫狗继承了动物的遗产。我需要对狗和猫进行 CRUD 操作; 我也希望能够对动物进行一般操作。
我的第一个想法是这样做:
GET /animals # get all animals
POST /animals # create a dog or cat
GET /animals/123 # get animal 123
问题在于/Animal 集合现在是“不一致的”,因为它可以返回并获取结构不完全相同的对象(狗和猫)。集合返回具有不同属性的对象是否被认为是“ 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
但是现在猫和狗的关系已经消失了。如果要检索所有动物,必须查询狗和猫的资源。网址的数量也将随着每个新的动物亚型而增加。
另一项建议是通过增加以下内容来扩大第二种解决办法:
GET /animals # get common attributes of all animals
在这种情况下,返回的动物将只包含所有动物共有的属性,删除特定于狗和特定于猫的属性。这允许检索所有的动物,虽然与较少的细节。每个返回的对象都可以包含到详细的具体版本的链接。
有什么意见或建议吗?