【问题标题】:What is my backend API name? Where is it? Calling Google Cloud endpoint backend API from Android Studio Client我的后端 API 名称是什么?它在哪里?从 Android Studio 客户端调用 Google Cloud 端点后端 API
【发布时间】:2019-02-07 07:11:53
【问题描述】:

我想在我的 android studio (v3.3) 项目中使用 google cloud endpoint v2 连接到 App Engine(最终是 google cloud sql(不是 firebase,因为我将进行复杂的查询))。

谷歌云 SDK、OpenAPI、端点配置正在运行(它可以通过 Windows PowerShell 接收回显“hello world”),我按照本教程构建了客户端库:https://cloud.google.com/endpoints/docs/frameworks/java/gen_clients

我已将客户端库导入到 Android Studio 项目文件 Libs 中,目前正在按照本教程从 Android Studio 客户端调用后端 API: https://cloud.google.com/endpoints/docs/frameworks/java/calling-from-android

编辑完 gradle 文件后,建议将下面代码中的“Tictactoe”替换为你的后端 API 的名称

Tictactoe.Builder builder = new Tictactoe.Builder(
    AndroidHttp.newCompatibleTransport(), new GsonFactory(), null);
service = builder.build();

我花了 8 个小时试图弄清楚那会是什么。我在导入的库中找不到任何有效的文件。我尝试单独使用我的 Google Cloud 项目 ID 或后跟 .appspot.com,但没有任何效果。

我认为它一定在我的项目文件中,我只需要知道在哪里。而且不知道它叫什么会使搜索变得棘手。

注意:Google Cloud 网站建议在 stackoverflow 上提出技术问题

【问题讨论】:

    标签: java android android-studio google-cloud-endpoints-v2


    【解决方案1】:

    此名称来自配置 Endpoints API 时设置的多个 @Api 注释。听起来您可能从 appengine-java8/endpoints-v2-backend 示例开始,该示例具有以下声明:

    @Api(
        name = "echo",
        version = "v1",
        namespace =
        @ApiNamespace(
            ownerDomain = "echo.example.com",
            ownerName = "echo.example.com",
            packagePath = ""
        ),
    ...
    

    你可以在Echo.java看到完整的定义。

    这里要注意的重要事项是name 字段和来自namespaceownerDomain。这两者一起用于生成代码所属的 Java 包,但 ownerDomain 路径的段是相反的(在 Java 包中是标准的,它以与普通 DNS 段相反的方式表示层次结构) ,所以Java包最终是com.example.echo.echo。 Java 类只是以@Api.name 字段命名(大写),所以类名就是Echo

    因此,您正在寻找的完全限定的 Java 类是:

    com.example.echo.echo.Echo
    

    或者,对于您的确切代码 sn-p:

    com.example.echo.echo.Echo.Builder
    

    这可能会令人困惑,因为此示例多次使用“回声”一词,很难确定每个 echo 来自何处,但这里有另一个示例:

    假设您将@Api.name 设置为myApiName,然后将@Api.namespace.ownerDomain 设置为mycompany.com。您将从生成的客户端库中使用的完全限定的 Java 类是:

    com.mycompany.myApiName.MyApiName
    

    但是,我不建议您尝试根据这些规则手动找出 Java 包和类名是什么。更简单的做法是查看 Endpoints 生成的客户端库。

    当您运行gradle endpointsClientLibs 时,该命令会将其生成的文件的位置输出为.zip 文件。您所要做的就是解压缩此文件并浏览其中生成的所有代码,以便轻松查看 Java 包结构的外观,甚至是 Endpoints 为您生成的确切类定义。

    如果您在 IDE 中找不到这些类,我想知道您是否不小心错过了 Generating a client library 说明中的步骤 4-7:

    4) Unzip the file using the unzip utility, or use another ZIP-compatible unarchiving utility:
    
    unzip ./echo-v1-java.zip
    
    5) Change directory: cd echo.
    
    6) Build the client library:
    
    gradle build
    
    The output is in the `build/libs` directory. The exact filename depends on the version of the Java client. It is something like echo-v1-1.23.0-SNAPSHOT.jar.
    
    7) Add the client library JAR to your Java or Android app.
    

    【讨论】:

    • 非常感谢 Jacob 提供如此详尽的回答。如您所料,我已经下载了GoogleCloudPlatform/java-docs-samples 并按照generate a client library 的步骤进行操作,因此API 类位于我的电脑上的java-docs-samples\appengine-java8\endpoints-v2-backend\target\client- libs\echo\src\main\java\com\example\echo\echo\echo.java...
    • ...教程确实说过要添加在 java-docs-samples\appengine-java8\endpoints-v2-backend\target\echo-j8-1.0-SNAPSHOT 创建的 JAR 文件 但它没有明确说还要在 java-docs-samples\appengine-java8\endpoints-v2-backend\target\client-libs\echo\src\main\ 添加 .java 文件java\com\example\echo\echo 到你的 Android 项目(这对于比我更有经验的人来说可能很明显)。这让我感到困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2016-10-22
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2020-04-14
    • 2017-02-12
    相关资源
    最近更新 更多