我正在尝试对具有 2 个命名参数和一个 EntityObject 的 google enpoint 进行 PUT 调用,然后应该在正文中
@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”来自哪里(我正在本地主机上进行测试)我想如果它是 google api 来自的主机,那么它应该是“apis.google.com”
如果我在同一个地方直接使用相同的 api:
gapi.client.myendpoint.mymethod 然后它确实可以正确访问本地主机...
我似乎让它工作的唯一方法(以 rpc 方式)是合并这些东西:
var x = {field1:"data", field2:"data2"};
x.param1 = "test1";
x.param2 = "test2";
gapi.client.myendpoint.myMethod(x)
但是,如果您问我,这是一个相当大的技巧,因为现在我混合了一些东西,突然间,如果我将 param1 添加到 EntityObject 中,它也会得到(正文和路径(甚至是 url 参数)的东西应该分开。)
因此,生成方法“gapi.client.xxxxendpoint”似乎始终是 rpc 调用,其余的使用方式是转到错误的主机。