2012-09-07 49 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

相關問題