从另一个谷歌应用引擎Web应用程序servlet java

时间:2016-05-01 06:55:15

标签: google-cloud-endpoints google-cloud-platform

我有一个谷歌云端点api应用程序,我想从另一个谷歌应用程序引擎Web应用程序,从servlet说。云端点api不受保护。

我尝试寻找示例,但找不到一个。我看到与Android客户端相关的示例。 当尝试使用URLConnection它不起作用,我不确定是否也正确,样本代码或指针将有很大的帮助。我还检查了云端点api的日志,看看是否有任何请求通过,但我没有看到日志中的任何错误。

2 个答案:

答案 0 :(得分:0)

我也是这样做的,尽管有认证。您可以在MyAPI / build / libs / MyAPI-v1-SNAPSHOT.jar中使用端点API生成的Jar,就像在Android中一样。

一旦您依赖该JAR,构建API客户端的代码应如下所示。我正在使用OAuth身份验证和服务帐户,我将留在那里,因为它是您最终可能需要的更复杂的部分。但是,如果没有身份验证,您应该只能将凭据设置为null。

    HttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
    List<String> SCOPES = Arrays.asList(EMAIL_SCOPE);
    String SERVICE_ACCCOUNT_ID = "my-account-id@my-app.iam.gserviceaccount.com";
    String CREDENTIAL_FILE = "WEB-INF/my-file.p12";

    GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(HTTP_TRANSPORT)
            .setJsonFactory(JSON_FACTORY)
            .setServiceAccountId(SERVICE_ACCCOUNT_ID)
            .setServiceAccountScopes(SCOPES)
            .setServiceAccountPrivateKeyFromP12File(new File(CREDENTIAL_FILE))
            .build();

    MyAPI.Builder builder = new MyAPI.Builder(
            HTTP_TRANSPORT,
            JSON_FACTORY, credential)
            // options for running against local devappserver
            // - 10.0.2.2 is localhost's IP address in Android emulator
            // - turn off compression when running against local devappserver
            .setRootUrl("http://localhost:8080/_ah/api/")
            //  .setRootUrl("https://my-appengine-url.appspot.com/_ah/api")

    MyAPI myAPI = builder.build();

答案 1 :(得分:0)

您无法使用URLConnection从App Engine进行端点调用。请改用FetchURL。如果设置doNotFollowRedirect,您将在被叫App Engine项目中收到X-Appengine-Inbound-Appid标题。你可以信任这个标题,因为如果有人关闭App Engine,谷歌会将其剥离。确保您定位到yourproject.appspot.com域,因为它无法使用自定义域。

https://cloud.google.com/appengine/docs/java/appidentity/