【问题标题】:What is the essence of "exposing" an API especially in Google Cloud Endpoint?“公开” API 的本质是什么,尤其是在 Google Cloud Endpoint 中?
【发布时间】:2016-10-26 15:36:46
【问题描述】:

我对整个 Google Cloud Endpoint/Google App Engine 世界完全陌生。如果您已经浏览过 Google 提供的 Hello World 示例(并且您可能已经浏览过),您可能还记得有 2 个为您自动生成的类:MyBeanMyEndpoint

这些是这样的:

/**
 * The object model for the data we are sending through endpoints
 */
public class MyBean {

    private String myData;

    public String getData() {
        return myData;
    }

    public void setData(String data) {
        myData = data;
    }
}

还有,

/**
 * An endpoint class we are exposing
 */
@Api(
        name = "myApi",
        version = "v1",
        namespace = @ApiNamespace(
                ownerDomain = "backend.myapplication.DJ.example.com",
                ownerName = "backend.myapplication.DJ.example.com",
                packagePath = ""
        )
)
public class MyEndpoint {

    /**
     * A simple endpoint method that takes a name and says Hi back
     */
    @ApiMethod(name = "sayHi")
    public MyBean sayHi(@Named("name") String name) {
        MyBean response = new MyBean();
        response.setData("Hi, " + name);

        return response;
    }

}

现在,我检查了 index.html 中的代码(在部署后端时打开)。我在 javascript 中找到了以下调用:

gapi.client.myApi.sayHi({'name': name}).execute(

现在,我可以通过注解看到 myApi 是名称,而 sayHi() 是相应的方法,我不明白的是公开 API 的概念,注解有助于实现这一点。没有任何关于公开 API 的信息。

谁能帮我理解这个?

【问题讨论】:

    标签: java google-app-engine annotations google-cloud-endpoints


    【解决方案1】:

    我认为你的问题可以分为三个部分:

    1/ 什么是公开 API? 基本上,您通过接口(API)提供对业务逻辑的访问,完全控制您想要显示或不显示的内容。这个 Stack Exchange 答案是一个很好的解释:https://softwareengineering.stackexchange.com/questions/203844/what-does-it-mean-to-expose-something

    2/ 自动生成的端点类中的这些注释是什么? 如果我可以这样总结,谷歌端点是一个“框架”,它根据你的 Java bean 生成“默认”API。默认情况下,您在 API 中获得 CRUD 操作,但您可以修改和/或丰富端点以提供更复杂的业务逻辑。生成的 Endpoints 类包括框架使用的特定注释(特别是在生成相应的 servlet 时),并定义您将调用以与 API 的方法交互的 URI。见https://cloud.google.com/appengine/docs/java/endpoints/

    3/ 这个 gapi.client 调用是什么? gapi 代表 Google API 客户端库。它是 Google 提供的用于从 Web 浏览器与 Endpoints 交互的库。见https://developers.google.com/api-client-library/javascript/ 您可以使用其他方法来调用 Endpoint API,例如 jquery Ajax 方法 (http://api.jquery.com/jquery.ajax/),因为 Endpoints 遵循 REST 架构风格。请注意,您可以从 Web 浏览器以外的其他“客户端”调用端点,例如Android 或 iOS 应用程序。在这些情况下,您不会使用 Google API 客户端库,而是使用其他一些库。

    我希望这能澄清一点。不要犹豫,询问更多详情。

    【讨论】:

    • 感谢您的回复和参考链接。据我所知,理解这个系统的关键是识别当事人。因此,如果我想通过接口公开我的库,可以通过提供的注释来完成。(由 Google 提供帮助)。但如果我在 Android 上开发,我只想调用 Google 的 API 来处理对我的应用程序的请求。我的后端模块会处理它们,并且只有 Servlet 来处理它们。此外,后端模块将部署在服务器上。在这些交互中,我找不到公开代码的需要。续...
    • 所以,我可以不曝光,对吧?我可能需要暴露的唯一场景是服务器想要向我的代码发送请求时(还没有想到任何这样的场景)。
    • 我不是 100% 肯定了解您的需求。如果您的目标是让您的 Android 应用程序与您的后端交互,例如在 Cloud Datastore 中存储数据,Cloud Endpoints 确实是要走的路。通过使用您的话,我会说您应该“调用 Google 的 API 来处理来自我的应用程序的请求”。我建议你看看这些关于端点和 Android 的非常好的教程:rominirani.com/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2018-05-23
    • 2023-03-21
    • 1970-01-01
    • 2011-02-01
    • 2018-08-04
    相关资源
    最近更新 更多