2013-04-28 34 views
1

由於某種原因,當使用http_method = GET而不是POST時,我無法讀取請求參數。GET AppEngine端點中的MessageField的請求參數是無

@endpoints.method(RequestMessage, 
        ResponseMessage, 
        name='get', 
        path='mypath', 
        http_method='GET') 
def get_challenge(self, request): 
    # This is None in http_method=GET but works on POST 
    print request.my_message_field 

我的郵件類是這樣的:

class MyMessage(messages.Message): 
    id = messages.StringField(1) 
    name = messages.StringField(2) 

class RequestMessage(messages.Message): 
    my_message_field = messages.MessageField(MyMessage, 1) 

我通過API瀏覽器測試API。任何想法,如果我做錯了什麼或什麼?

由於

回答

1

的參數應當顯示爲my_message_field.idmy_message_field.name

最根本的區別是GET沒有有效載荷和POST。因此,您的參數名稱空間必須是「平坦的」而不是嵌套的JSON。因此,爲了適應這一點,我們將上面提到的參數展平。

UPDATE:

這一定是有一些不正確得到移植到devappserver的問題。我添加了一個記錄器endpoints.apiserving,以確定哪些是從API前端傳遞到App Engine後端:

在生產

'{"my_message_field":{"id":"x","name":"y"}}' 

devappserver2

'{"my_message_field.name": ["y"], "my_message_field.id": ["x"]}' 

當試圖通過解析

from protorpc import remote 
protocols = remote.Protocols.get_default() 
json_protocol = protocols.lookup_by_content_type('application/json') 
json_protocol.decode_message(RequestMessage, payload) 

這是api_server做什麼,這是發生了什麼

在生產

<RequestMessage 
my_message_field: <MyMessage 
id: u'x' 
name: u'y'>> 

devappserver2

<RequestMessage> 
+0

這是否意味着它在devappserver2的錯誤嗎?我們是否應該在某處提交錯誤?感謝您的解釋。 – mkhatib 2013-04-28 21:18:26

+1

我已經處理好了。我認爲它可能與舊的'dev_appserver'中的功能/補丁有關,該功能未及時發佈到'devappserver2'。 – bossylobster 2013-04-28 23:06:14

+2

@mkhatib我確認這已被正確移植到'devappserver2',並應該在下一個版本中工作。對不起的行爲。如果它真的很重要,現在可以在'old_dev_appserver.py'中使用:S – bossylobster 2013-04-29 21:35:12