小编Rod*_*Gil的帖子

将REST和RPC混合在一起是不好的做法?

我是REST Web服务的新手,非常习惯于RPC.我通过阅读像这样的几个帖子来了解REST的优点.

我正在使用django-rest-framework在django中开发服务器.

虽然有这个问题(或问题):

我有这个型号:

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)
Run Code Online (Sandbox Code Playgroud)

所以我可以进行一次民意调查,或者我可以在民意调查聚合器(即房间)中汇总一堆民意调查.

所以我创建了其余的调用:pollList,pollDetail,pollAggregatorList,pollAggregatorDetail.但是我在为PollPollAgregatorRel设计时遇到了问题.当然我可以使用PollPollAgregatorRelList和PollPollAgregatorRelDetail进行正常发布,获取,更新,删除.因此,如果我想在REST样式中建立一个poll和poll聚合器之间的新关系,我会:

  • 检查PollPollAgregator(list)是否存在带有get的poll id并通过pollId过滤
  • 如果是这样,我更新此项目以获得我的新pollAggregator ID
  • 如果不是,我用帖子创建一个新的PollPollAgregator

我的第一个问题是有没有更容易和更简单的方法来做到这一点?

如果我使用类似RPC的Web服务,我会做类似的事情:

  • 使用pollAggregator进行轮询,并使用get_or_create进行PollPollAggregatorRel.所以我更新或创建一个新的PollPollAggregatorRel对象.

因此,使用RPC之类的,客户端只使用一次调用而不是需要调用2次的REST.在这种情况下,对服务器端和客户端使用RPC似乎要简单得多.

第二个问题是:在同一个API中同时使用REST和RPC是不好的做法吗?

django rest rpc django-rest-framework

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

标签 统计

django ×1

django-rest-framework ×1

rest ×1

rpc ×1