2012-09-07 52 views
1

我正在编写一个Web应用程序,其目的是充当应用程序和Amazon API之间的中间层。我想到一个REST风格的API会适合并选择Tastypie来缓解实现。如何处理Django/Tastypie中的操作?

我创建了一个名为Instance的模型和一个Tastypie资源。为了简化一下,假设对该资源的PUT将启动一个EC2实例,并且一个DELETE将会停止它。我需要与亚马逊的API进行交流的适当场所在哪里处理这些行为?它应该放在资源代码,模型代码还是其他地方?

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

回答

0

我会做这样的:

在车型:

  • 放在
  • 在实例模型中的Django Post Save Signal执行特殊啄数据库中创建一个新的实例,并将其存储.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() 
    

    in 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 
    
+0

谢谢您花时间回答!这看起来很有趣,但我希望告诉客户在亚马逊成功或不成功的情况下对初始PUT的响应,即如果亚马逊在资源等方面说的话会返回一些错误文本。另一方面,在WS与亚马逊通信时让请求停止也许是个坏主意,也许最好让用户发出状态请求来查看它是否成功。 – Patrik

+0

是的,后者虽然需要更多的工作从用户角度来看更好。 – kgr

相关问题