相关疑难解决方法(0)

如何使用继承建模RESTful API?

我有一个对象层次结构,我需要通过RESTful API公开,我不确定我的URL应该如何构建以及它们应该返回什么.我找不到任何最佳做法.

假设我有继承动物的狗和猫.我需要对狗和猫进行CRUD操作; 我也希望能够对动物进行一般操作.

我的第一个想法是做这样的事情:

GET /animals        # get all animals
POST /animals       # create a dog or cat
GET /animals/123    # get animal 123
Run Code Online (Sandbox Code Playgroud)

问题是/ 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
Run Code Online (Sandbox Code Playgroud)

但现在狗和猫之间的关系就失去了.如果想要检索所有动物,必须查询狗和猫的资源.每个新的动物子类型的URL数量也会增加.

另一个建议是通过添加以下内容来扩充第二个解决方案:

GET /animals    # get common attributes of all animals
Run Code Online (Sandbox Code Playgroud)

在这种情况下,返回的动物将仅包含所有动物共有的属性,丢弃特定于狗的属性和特定于猫的属性.这允许检索所有动物,尽管细节较少.每个返回的对象都可以包含指向详细的具体版本的链接.

有什么意见或建议吗?

api rest polymorphism inheritance

79
推荐指数
2
解决办法
2万
查看次数

标签 统计

api ×1

inheritance ×1

polymorphism ×1

rest ×1