google-cloud-platformgoogle-app-enginegoogle-cloud-endpoints

How to call App Engine Endpoints with the JavaScript library in promises mode


I have a web application which calls several App Engine Endpoints with the Google API JavaScript client library.

I am currently changing this application from callback mode to promises mode, as recommended by Google (https://developers.google.com/api-client-library/javascript/features/promises#using-promises) and I am encountering a problem. Note that the app works well with the callback mode.

My problem with the promises mode is to find what is the correct path argument to use when calling the request method:

JavaScrit code:

var params = {'webSafeKeyParent’: ‘neN4fm15xW52b2ljZXMtb19saW5lmlYLEglBY1NFwpRpdHkYgICAgQj97AoM’};
gapi.client.request({
      'path': 'https://myappenginename.appspot.com/_ah/api/customerApi/v1/?????????',
      'params': params
}).then(function(response) {
        // Handle response       
}, function(reason) {
        // Handle error
});

Endpoint definition in "customerApi":

@ApiMethod(
        name = "listByParent",
        path = "customerByParent/{webSafeKeyParent}",
        httpMethod = ApiMethod.HttpMethod.GET,
        scopes = {Constants.EMAIL_SCOPE},
        clientIds = {Constants.WEB_CLIENT_ID, com.google.api.server.spi.Constant.API_EXPLORER_CLIENT_ID},
        audiences = {Constants.ANDROID_AUDIENCE})
public List<Customer> listByParent(final User user, @Named("webSafeKeyParent") final String webSafeKeyParent, @Nullable @Named("cursor") String cursor, @Nullable @Named("limit") Integer limit) throws UnauthorizedException {

For few of my endpoints it works by including in the path argument of the JavaScript request method, the values of "path" and "name" as declared in the @ApiMethod annotation.

i.e. for the above endpoint, the following path works: https://myappenginename.appspot.com/_ah/api/customerApi/v1/customerByParent/listByParent

Strangely enough this does NOT work for some other endpoints of the same kind. I receive either a 404 HTTP error or a 503 one.

I've also tried with the paths displayed under "Request" when you query the endpoints with the APIs Explorer but without success....

Is there any detailed documentation on how to call App Engine Endpoints with promises, with the Google API JavaScript client library? I have not found any. Do you have some advice to share please?

Thanks in advance


Solution

  • Actually the request method DOES work ALL THE TIME with the "path" argument composed of the values of "path" and "name" as declared in the @ApiMethod annotation...

    It was a mistake on my side if it didn't work for some endpoints. Don't know which mistake, however.

    Note that I have noticed that it is very important to pass to the JavaScript request method the correct httpMethod of the App Engine Endpoints. By default the request methid assumes that it is a GET. In case your Endpoint has httpMethod= ApiMethod.HttpMethod.POST in the @ApiMethod annotation, you shall pass the argument 'method': 'POST', as detailed in the doc: https://developers.google.com/api-client-library/javascript/reference/referencedocs#gapiclientrequestargs