Google Cloud端点:端点请求参数(资源容器)在部署时为空

时间:2016-10-04 02:15:08

标签: javascript python google-app-engine google-cloud-endpoints

我有一个适用于Google App Engine的应用。后端使用Python,前端使用JavaScript。该应用程序在本地按预期工作,API Explorer在部署时按预期工作。

但是,API在部署时无法按预期使用前端。问题是从请求中获取参数("资源容器")的云端点方法会收到"空"请求 - 来自JavaScript前端的请求的参数消失。

这是一个例子。

JavaScript API调用:

var id_resource = {'resource': {'user_google_id': "-1"}};

gapi.client.word_match.get_user_from_google_id(id_resource).execute(function(resp) {

    console.log(resp); // THE API CALL 'LOSES' THE 'user_google_id' WHEN DEPLOYED: THIS LOGS AN ERROR ("Object {code: 404, data: Array[1], message: "No user with the id "None" exists.", error: Object}") WHEN DEPLOYED, BUT LOGS THE CORRECT USER INFO LOCALLY
    if (!resp.code) {

        self.user(new User(resp));
    }
});

云端点:

REQUEST_BY_GOOGLE_ID = endpoints.ResourceContainer(user_google_id=messages.StringField(1),)

@endpoints.api(name='word_match', version='v1', allowed_client_ids=['the id'],
    auth_level=endpoints.AUTH_LEVEL.OPTIONAL_CONTINUE)
class WordMatchApi(remote.Service):
    """Game API
    """
    @endpoints.method(request_message=REQUEST_BY_GOOGLE_ID,
                      response_message=UserForm,
                      path='getuser',
                      name='get_user_from_google_id',
                      http_method='POST')
    def get_user_from_google_id(self, request):
        """Get a user by the user's google account ID
        """

        logging.info(request) // THIS IS THE ISSUE: LOGS "<CombinedContainer> user_google_id: u'-1'>" locally, but just "<CombinedContainer>" when deployed.
        logging.info(request.user_google_id)

        user = User.query(User.google_id == request.user_google_id).get()

        if not user:
            message = 'No user with the id "%s" exists.' % request.user_google_id
            raise endpoints.NotFoundException(message)

        return user.to_form()

部署后user_google_id在请求中的位置?为什么Python认为那里什么都没有?

1 个答案:

答案 0 :(得分:0)

我得到了它的工作。主要修复基于this documentation。我“定义了一个消息类,其中包含将在请求主体中传递的所有参数”,然后定义请求消息中使用的资源容器以包含该类。