Google Cloud Endpoints - 使用JS客户端进行调用,传递params和JSON正文

时间:2013-11-06 05:42:13

标签: google-cloud-endpoints

我在理解这方面的一些文档时遇到了一些麻烦。位于......

https://developers.google.com/appengine/docs/java/endpoints/consume_js

具体......

// Insert a score
gapi.client.tictactoe.scores.insert({'outcome':
    'WON'}).execute(function(resp) {
  console.log(resp);
});

// Get the list of previous scores
gapi.client.tictactoe.scores.list().execute(function(resp) {
  console.log(resp);
});

似乎他们正在将得分对象(在请求正文中作为JSON)传递给他们用于添加分数的API调用。好的,听起来很酷。关于如何传递查询参数,URL参数或者可能同时全部三个,目前还不清楚。

他们会是这样的三个JSON对象......

gapi.client.tictactoe.scores.insert({
    'outcome': 'WON'
},
{
    urlParamName: 'value'
},
{
    queryParamName: 'value'
},).execute( ...

或者它们都在同一个JSON对象中?这很可能就是这种情况,因为Endpoints不允许在params和成员之间发生任何名称冲突。

我似乎无法找到关于此的文档,有人可以简单地帮助我,所以我可以确定通过这些东西的格式是什么?感谢。

1 个答案:

答案 0 :(得分:16)

不幸的是,除了一些小提及e.g. here

之外,这个文档没有很好的记录

通常调用API方法,如下所示:

gapi.client.myapi.myresource.mymethod(params)

params是一个JSON对象,它包含所有查询和路径参数,以及一个resource,它将在POST请求中作为正文发送。

实际上,在上面的示例中,他们将outcome作为查询参数作为POST请求发送给tictactoe\v1\scores?outcome=WON,并且空主体。这是有效的,因为Cloud Endpoints在合并请求对象与正文以及查询和URL参数方面没有区别。这适用于这种情况,但只要在请求体内嵌套了JSON对象就会失败。

调用上述方法的正确方法是

gapi.client.tictactoe.scores.insert({
    'resource': {'outcome': 'WON'}
})

如果您有查询和网址参数,则如下所示:

gapi.client.myapi.myresource.mymethod({
    'param1': 'value1',
    'param2': 'value2',
    'resource': body
})

其中body可以是任何JSON对象。或者对于不需要身体的方法,你只需要

gapi.client.myapi.myresource.mymethod({
    'param1': 'value1',
    'param2': 'value2'
})