1

我是谷歌云端点的新手,尤其是 V2,我认为它是制作基于服务的应用程序的重要层。从我观察到的文档中,他们提供了使用端点框架然后打开 api 的选项。现在,当我使用需要 api 密钥的框架然后生成 openapi.json 时,我在没有请求的情况下似乎不会出现任何错误API 密钥。我想知道为什么当我将我的类标记为需要 API 密钥时会这样。我自己提供验证逻辑吗?这是使用 api 验证所有方法的配置。

@Api(name = "testapi",
    version = "v1",
    apiKeyRequired = AnnotationBoolean.TRUE,
    scopes = {Constants.EMAIL_SCOPE},
    clientIds = {Constants.WEB_CLIENT_ID, Constants.ANDROID_CLIENT_ID},
    audiences = {Constants.ANDROID_AUDIENCE}

)

然后生成 openapi.json 文件,这是 pom 配置,虽然我仍在尝试掌握如何以这种方式配置它,但我不需要输入我的服务类

 <profiles>
    <profile>
        <id>GetSwaggerDoc</id>
        <activation>
            <property>
                <name>GetSwaggerDoc</name>
            </property>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.4.0</version>
                    <configuration>
                        <includePluginDependencies>true</includePluginDependencies>
                        <mainClass>com.google.api.server.spi.tools.EndpointsTool</mainClass>
                        <arguments>
                            <argument>get-swagger-doc</argument>
                            <argument>--hostname=test-api.endpoints.${endpoints.project.id}.cloud.goog</argument>
                            <argument>--war=target/test-1.0-SNAPSHOT</argument>
                            <argument>com.rareatom.test.services.TestApi</argument>
                        </arguments>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>com.google.endpoints</groupId>
                            <artifactId>endpoints-framework-tools</artifactId>
                            <version>${endpoints.framework.version}</version>
                        </dependency>
                        <dependency>
                            <groupId>com.google.appengine</groupId>
                            <artifactId>appengine-api-1.0-sdk</artifactId>
                            <version>1.9.30</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>`

当我运行mvn exec:java -DGetSwaggerDoc 这是生成的

{
 "swagger": "2.0",
 "info": {
  "version": "1.0.0",
  "title": "test-api.endpoints.test-test-160113.cloud.goog"
 },
 "host": "test-api.endpoints.test-test-160113.cloud.goog",
 "basePath": "/_ah/api",
 "schemes": [
  "https"
 ],
 "consumes": [
  "application/json"
 ],
 "produces": [
  "application/json"
 ],
 "paths": {
  "/testapi/v1/test": {
   "post": {
    "operationId": "TestapiTest",
    "parameters": [ ],
    "responses": {
     "200": {
      "description": "A successful response",
      "schema": {
       "$ref": "#/definitions/Response"
      }
     }
    },
    "security": [
     {
      "google_id_token": [ ]
     },
     {
      "google_id_token_https": [ ]
     },
     {
      "api_key": [ ]
     }
    ],
    "x-security": [
     {
      "google_id_token": {
       "audiences": [
        "AIzaSyAsnv2yeF6003txjfBVrZrlUe8jvfUJAtE"
       ]
      }
     },
     {
      "google_id_token_https": {
       "audiences": [
        "AIzaSyAsnv2yeF6003txjfBVrZrlUe8jvfUJAtE"
       ]
      }
     }
    ]
   }
  }
 },
 "securityDefinitions": {
  "google_id_token_https": {
   "type": "oauth2",
   "authorizationUrl": "",
   "flow": "implicit",
   "x-google-issuer": "https://accounts.google.com",
   "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs"
  },
  "api_key": {
   "type": "apiKey",
   "name": "key",
   "in": "query"
  },
  "google_id_token": {
   "type": "oauth2",
   "authorizationUrl": "",
   "flow": "implicit",
   "x-google-issuer": "accounts.google.com",
   "x-google-jwks_uri": "https://www.googleapis.com/oauth2/v1/certs"
  }
 },
 "definitions": {
  "Status": {
   "enum": [
    "SUCCESS",
    "FAILURE"
   ]
  },
  "Response": {
   "properties": {
    "code": {
     "type": "integer",
     "format": "int32"
    },
    "data": {
     "$ref": "#/definitions/_any"
    },
    "message": {
     "type": "string"
    },
    "status": {
     "$ref": "#/definitions/Status"
    }
   }
  },
  "_any": { }
 }
}

然后使用 gcloud service-management deploy 部署此配置。

4

1 回答 1

2

我注意到,当您的 pom.xml 和 web.xml 中有多个参数或多个 @Api 注释类时,api 密钥被验证

pom.xml

<arguments>
  <argument>get-swagger-doc</argument>
  <argument>--hostname=tita-api.endpoints.${endpoints.project.id}.cloud.goog</argument>
   <argument>--war=target/tita-1.0-SNAPSHOT</argument>           
   <argument>com.rareatom.tita.services.TestApi</argument>                               
   <argument>com.rareatom.tita.services.SessionServices</argument>                     
                        </arguments>

对于你的 web.xml

<servlet>
    <servlet-name>EndpointsServlet</servlet-name>
    <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
    <init-param>
        <param-name>services</param-name>
        <param-value>com.rareatom.tita.services.TestApi,
        com.rareatom.tita.services.SessionServices</param-value>
</init-param>
</servlet>
于 2017-05-09T21:09:26.633 回答