1

私は、2つの名前付きパラメーターと、本体で使用する必要があるEntityObjectを持つGoogleエンドポイントへの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"}})

私はこれへのポストリクエストを受け取ります:

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)

しかし、あなたが私に尋ねると、これはかなりのハックです。なぜなら、今私はものを混ぜ合わせているからです。突然、EntityObjectにparam1を追加すると、それも取得されます(本体とパス(またはURLパラメーター)のものを分離する必要があります。)

したがって、生成メソッド「gapi.client.xxxxendpoint」は常に rpc 呼び出しであり、残りの使用方法は間違ったホストに行くようです。

4

1 に答える 1