使用gapi.client.myendpoint或gapi.client.request时如何进行真正的REST调用?

时间:2013-09-08 10:25:05

标签: google-app-engine rest google-cloud-endpoints

我正在尝试对一个谷歌点进行PUT调用,该点有两个命名的参数和一个应该在正文中的EntityObject

@ApiMethod(name = "myMethod")
public MyEntity myMethod(@Named("param1") String param1, @Named("param2") String param2, MyEntity entity)

如果我去:

https://developers.google.com/apis-explorer/?base=http://localhost:8889/_ah/api#p/myendpoint/v1/myendpoint.myMethod

我需要的2个参数字段,但是请求正文我也可以获得我可以填写的MyEntity字段。

它生成:

PUT http://localhost:8889/_ah/api/myendpoint/v1/mymethod/test1/test2

并且身体有我填写的字段

在服务器端,我完全得到了我期望得到的东西。

但是现在我尝试在客户端做我自己的事情,但似乎总是会生成一个rpc调用身体中的所有内容。

这样的电话:(那个“身体”是试用)

gapi.client.myendpoint.mymethod({param1:"test1",param2:"test2",body:{field1:"data",field2:"data2"}})

我收到了一个帖子请求:(所以它看起来像是一个rpc电话,但那不是我想要的)

http://localhost:8889/_ah/api/rpc

一切都在身体里...... 在我的服务器端,EntityObject只是完全为空,因为它没有正确映射..

如果我用自己重建它自己:

https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientrequest

    var request = gapi.client.request({
              path: "myendpoint/v1/mymethod/" + param1+ "/" +param2,
              method: 'PUT',
              body: {field1:"data",field2:"data2"}
            });

然后我收到了一个请求:

https://content.googleapis.com/myendpoint/v1/mymethod/test1/test2&alt=json

不确定“content.googlepis.com”的来源(我正在localhost上测试) 我想如果它是google api来自的主机那么应该是“apis.google.com”

如果我直接在同一个地方使用相同的api:

gapi.client.myendpoint.mymethod然后它确实正确地转移到localhost ...

我似乎让它工作的唯一方式(以rpc方式)是合并这些东西:

var x = {field1:"data", field2:"data2"};
x.param1 = "test1";
x.param2 = "test2";
gapi.client.myendpoint.myMethod(x)

但是,如果你问我,这是一个非常黑客,因为现在我混合了东西,突然如果我将param1添加到EntityObject它也得到了 (身体和路径(甚至url params)的东西应该分开。)

所以似乎生成方法“gapi.client.xxxxendpoint”总是rpc调用 其余的使用方式是错误的主机。

1 个答案:

答案 0 :(得分:0)

根据文档,您应该使用“资源”而不是“正文”。

...    
method: 'PUT',
resource: {field1:"data",field2:"data2"}
...