我正在编写一个网络应用程序,其目的是充当应用程序和亚马逊 API 之间的中间层。我认为 REST 风格的 API 适合并选择 Tastypie 来简化实现。
我创建了一个名为 Instance 的模型和一个与之配套的 Tastypie 资源。为了简化一点,假设对该资源的 PUT 将启动 EC2 实例,而 DELETE 将停止它。我需要与亚马逊的 API 通信的地方在哪里处理这些操作的正确位置?它应该放在资源代码、模型代码还是其他地方?
另外,向客户端返回错误消息的最合适方法是什么?
我会这样做:
在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