"暴露"的本质是什么?特别是在Google Cloud Endpoint中的API?

时间:2016-10-26 15:36:46

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

我对整个Google Cloud Endpoint / Google App Engine世界都很陌生。如果您已经浏览了Google提供的Hello World示例(您可能已经拥有),您可能还记得有两个类是自动为您生成的: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的任何信息。

有人能帮我理解吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

我希望这有点澄清。不要犹豫,询问更多细节。