Django 将REST和RPC混合在一起是一种糟糕的做法吗?
我对RESTweb服务相当陌生,并且非常习惯RPC。通过阅读几篇类似于一篇的文章,我知道了REST的优点 我正在使用django rest框架在django中开发服务器 尽管有以下问题: 我有这个模型:Django 将REST和RPC混合在一起是一种糟糕的做法吗?,django,rest,rpc,django-rest-framework,Django,Rest,Rpc,Django Rest Framework,我对RESTweb服务相当陌生,并且非常习惯RPC。通过阅读几篇类似于一篇的文章,我知道了REST的优点 我正在使用django rest框架在django中开发服务器 尽管有以下问题: 我有这个模型: class Poll(models.Model): questionString = models.CharField(max_length=500, blank=True) timeToAnswer = models.IntegerField(default=30) s
class Poll(models.Model):
questionString = models.CharField(max_length=500, blank=True)
timeToAnswer = models.IntegerField(default=30)
startDate = models.DateTimeField(null=True, db_column='startDate', blank=True)
token = models.CharField(max_length=20, blank=True, unique=True)
class PollAggregator(models.Model):
name = models.CharField(max_length=135)
description = models.CharField(max_length=500, blank=True)
votersToken = models.CharField(max_length=20, null=True, blank=True)
class PollPollAggregatorRel(models.Model):
pollAggregator = models.ForeignKey(PollAggregator, null=True, db_column='pollAggregatorId', blank=True)
poll = models.ForeignKey(Poll, null=True, db_column='pollId', blank=True)
因此,我可以进行一次投票,也可以在投票聚合器(即房间)中聚合一组投票
所以我创建了其余调用:pollList、pollDetail、pollAggregatorList、pollAggregatorDetail。但是我有问题要为Pollagregatorrel设计。
当然,我可以使用pollagregatorrellist和pollagregatorreldetail,进行正常的发布、获取、更新和删除。因此,如果我想在REST样式的轮询和轮询聚合器之间建立新关系,我会:
- 检查PollaGragator(列表)是否存在,其轮询id为get并按pollId进行筛选
- 如果是这样,我将更新此项以获得新的轮询聚合器id
- 如果没有,我将创建一个新的pollagregator,其中包含一个post
- 将轮询与pollAggregator关联,并为PollAggregatorRel使用get_或_create。所以我更新或创建了一个新的PollAggregatorRel对象
第二个问题是:在同一个API中同时使用REST和RPC是一种不好的做法吗?Q1:我认为提供REST风格的POST操作是合理的,它可以返回现有的聚合器,也可以根据需要创建新的聚合器。从逻辑上讲,这似乎与您的“RPC”服务没有什么不同 我认为您的部分困难可能是您设计的REST“调用”(提示:它们不是“调用”,而是“资源”)过于接近底层模型。这是我过去犯的一个错误 休息!=积垢 REST的一个关键好处是,它允许将接口与模型分离,因此服务器可以在不影响客户端的情况下更改其实现。另一个关键好处是,它最大限度地减少了客户执行某些操作之前需要知道的信息量。例如,REST客户端应该能够通过与服务的“前端资源”(类似于“前端页面”)交互来发现它需要使用的所有资源URI 因此,我将考虑以下的一种方法来描述上面所描述的资源:
我这样做的理由是,如果您主要使用REST API,那么添加RPC元素可能会在客户机和服务器之间产生紧密耦合,而不是首先否定使用REST的意义。Great post!谢谢