相关疑难解决方法(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万
查看次数

在REST Api中建模对象继承

问题

我有一个具有User对象和Student对象的应用程序.有些用户是学生.所有学生都是用户.在数据库(基于django-ORM)中,这表示为具有Student表的外键的User表.

我正在尝试在iOS应用程序中创建一个REST API和一个对象层次结构来模拟这个API.我无法决定如何建模.

当前的解决方案

我提出的最好的是:User在iOS中有一个模型,在iOS中有一个Student模型,它继承User并扩展了更多的属性.然后,具有从该服务器接收的JSON响应,并创建一个方法或者一个User或一个Student模型,这取决于dictinoary.

最后,服务器需要始终为我提供最具体的类型.即,当我登录服务器时,它将决定我是学生还是普通用户,并将返回正确的字典.

这是最好的方法吗?

这听起来有点复杂.但是我想到的任何其他方式建模它,例如改变数据库的布局方式,给了我一种设计,其中数据库不知道所有的约束.例如,Student允许对象拥有其他对象(例如,homework_paper).我可以用User对象的外键而不是对象来建模Student,并说它Student只是用户的扩展.但是,数据库并没有强迫a homework_paper必须由学生拥有.

有没有更好的方法来解决我错过的这个问题?

oop api django rest objective-c

5
推荐指数
1
解决办法
3155
查看次数

标签 统计

api ×2

rest ×2

django ×1

inheritance ×1

objective-c ×1

oop ×1

polymorphism ×1