1

我正在编写一个网络应用程序,其目的是充当应用程序和亚马逊 API 之间的中间层。我认为 REST 风格的 API 适合并选择 Tastypie 来简化实现。

我创建了一个名为 Instance 的模型和一个与之配套的 Tastypie 资源。为了简化一点,假设对该资源的 PUT 将启动 EC2 实例,而 DELETE 将停止它。我需要与亚马逊的 API 通信的地方在哪里处理这些操作的正确位置?它应该放在资源代码、模型代码还是其他地方?

另外,向客户端返回错误消息的最合适方法是什么?

4

1 回答 1

0

我会这样做:

  • PUT 创建一个新的 Instance 并将其存储在数据库中
  • 实例模型上的Django Post Save Signal执行一个特殊的事情:

在models.py中:

@receiver(post_save, sender=Instance, dispatch_uid="create_instance")
def create_instance(sender, **kwargs):
    instance = kwargs['instance']
    created = kwargs['created']
    raw = kwargs['raw']
    if instance and created and not raw:
        from my_project.my_app.tasks import create_ec2_instance
        result = create_ec2_instance(instance)
        if result:
             instance.started = True
             instance.save()

在tasks.py中:

def create_ec2_instance(instace):
    # do the calls to ec2 to create the instance and get a result form it
    return the_result_from_ec2
于 2012-09-07T11:03:31.770 回答