2014-11-04 35 views
2

我試圖找到一種方法,允許用戶將一組結構化的信息作爲POST的一部分傳遞給使用Python的GAE雲端點。在POST中將數組/記錄傳遞到雲端點

示例文章如下。這是從谷歌採取跟蹤API,但恰恰說明了什麼,我試圖實現

{ 
    "entities": [ 
     { 
     "name": "Ford Fiesta 001", 
     "type": "AUTOMOBILE" 
     }, 
     { 
     "name": "Chevrolet Volt 001", 
     "type": "AUTOMOBILE" 
     }, 
     { 
     "name": "Chevrolet Volt 002", 
     } 
    ] 
    } 

從Python雲終端文檔這是不可能的閱讀,除非我可能允許JSON的自由形式的片段發送在請求主體中聽起來不是一個好主意 - 不是我已經嘗試過了。

回答

5

這很簡單。在構建messages.Message -inheriting類時,您需要使用repeated=True值作爲端點函數的參數格式。示例代碼:

import endpoints 
from protorpc import messages 
from protorpc import message_types 
from protorpc import remote 

# represents a car with a name and a type 
class Car(messages.Message): 
    name = messages.StringField(1) 
    type = messages.StringField(2) 

# represents a collection of Cars 
class MultiCars (messages.Message): 
    cars = messages.MessageField(Car, 1, repeated=True) 

# class to return a simple string message 
class ResponseMessage (messages.Message): 
    value = messages.StringField(1) 

# api code 
@endpoints.api(name='gmerrallApi',version='v1', 
       description='Example API for gmerrall') 
class ExampleApi(remote.Service): 
    # endpoints method to insert a MultiCars 
    @endpoints.method(MultiCars, 
         ResponseMessage, 
         name='cars.insertMulti', 
         path='/insertMultiCars/{entities}, 
         http_method='POST') 
     def insertMultiCars(self, request): 
      for car in request.entities: 
       print "got car (%s, %s)" % (car.name, car.type) 
      return ResponseMessage (value="The endpoints function ran to the end") 

花費時間來審查這個例子中,注意的是,註釋和消息類與你寫的代碼的端點交互的方式。此API方法接收的參數的JSON格式與您使用的問題完全相同。 @endpoints.method註釋中提供的類型信息告訴方法如何根據這些類定義中的消息字段來解釋JSON blob。