diff --git a/appengine/endpoints-frameworks-v2/backend/README.md b/appengine/endpoints-frameworks-v2/backend/README.md index 4c226cda3b0..817547af270 100644 --- a/appengine/endpoints-frameworks-v2/backend/README.md +++ b/appengine/endpoints-frameworks-v2/backend/README.md @@ -3,7 +3,9 @@ This sample demonstrates how to use Google Cloud Endpoints Frameworks using Java on App Engine Standard. -## Adding the project ID to the sample API code +## Build with Maven + +### Adding the project ID to the sample API code You must add the project ID obtained when you created your project to the sample's `pom.xml` before you can deploy the code. @@ -21,19 +23,19 @@ your project ID. 0. Save your changes. -## Building the sample project +### Building the sample project To build the project: mvn clean package -## Generating the openapi.json file +### Generating the openapi.json file To generate the required configuration file `openapi.json`: mvn exec:java -DGetSwaggerDoc -## Deploying the sample API to App Engine +### Deploying the sample API to App Engine To deploy the sample API: @@ -51,7 +53,92 @@ To deploy the sample API: 0. Wait for the upload to finish. -## Sending a request to the sample API +### Sending a request to the sample API + +After you deploy the API and its configuration file, you can send requests +to the API. + +To send a request to the API, from a command line, invoke the following `cURL` +command: + + curl \ + -H "Content-Type: application/json" \ + -X POST \ + -d '{"message":"echo"}' \ + https://$PROJECT_ID.appspot.com/_ah/api/echo/v1/echo + +You will get a 200 response with the following data: + + { + "message": "echo" + } + +## Build with gradle + +### Adding the project ID to the sample API code + +0. Edit the file `build.gradle`. + +0. For `def projectId = 'YOUR_PROJECT_ID'`, replace the value `YOUR_PROJECT_ID` with +your project ID. + +0. Edit the file `src/main/java/com/example/echo/Echo.java + +0. Replace the value `YOUR-PROJECT-ID` with your project ID. + +0. Save your changes. + +### Building the sample project + +To build the project use: + + gradle build + +
+ more details + The project contains the standard java and war plugins and in addition to that it contains the following plugins: + https://github.com/GoogleCloudPlatform/endpoints-framework-gradle-plugin for the endpoint related tasks and + https://github.com/GoogleCloudPlatform/app-gradle-plugin for the appengine standard related tasks. + + Check the links for details about the available Plugin Goals and Parameters. +
+ +### Generating the openapi.json file + +To generate the required configuration file `openapi.json`: + + gradle endpointsOpenApiDocs + +This results in a file in build/endpointsOpenApiDocs/openapi.json + +### Deploying the sample API to App Engine + +To deploy the sample API: + +0. Invoke the `gcloud` command to deploy the API configuration file: + + gcloud service-management deploy build/endpointsOpenApiDocs/openapi.json + +0. Deploy the API implementation code by invoking: + + gradle appengineDeploy + + The first time you upload a sample app, you may be prompted to authorize the + deployment. Follow the prompts: when you are presented with a browser window + containing a code, copy it to the terminal window. + +
+ ERROR: (gcloud.app.deploy) The current Google Cloud project [...] does not contain an App Engine application. + If you create a fresh cloud project that doesn't contain a appengine application you may receive this Error: + + ERROR: (gcloud.app.deploy) The current Google Cloud project [...] does not contain an App Engine application. Use `gcloud app create` to initialize an App Engine application within the project. + + In that case just execute `gcloud app create`, you will be asked to select a region and the app will be created. Then run gradle appengineDeploy again. +
+ +0. Wait for the upload to finish. + +### Sending a request to the sample API After you deploy the API and its configuration file, you can send requests to the API. diff --git a/appengine/endpoints-frameworks-v2/backend/build.gradle b/appengine/endpoints-frameworks-v2/backend/build.gradle new file mode 100644 index 00000000000..e09ba4c3851 --- /dev/null +++ b/appengine/endpoints-frameworks-v2/backend/build.gradle @@ -0,0 +1,68 @@ +// Copyright 2017 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License.import org.apache.tools.ant.filters.ReplaceTokens + +buildscript { + repositories { + mavenCentral() + } + + dependencies { + classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:+' + classpath 'com.google.cloud.tools:appengine-gradle-plugin:+' + } +} + +repositories { + maven { + url 'https://maven-central.storage.googleapis.com' + } + jcenter() + mavenCentral() +} + +task wrapper(type: Wrapper) { + gradleVersion = '3.5' +} + +def projectId = 'YOUR_PROJECT_ID' + +apply plugin: 'java' +apply plugin: 'war' +apply plugin: 'com.google.cloud.tools.endpoints-framework-server' +apply plugin: 'com.google.cloud.tools.appengine' + +dependencies { + // For real projects: use concrete versions here instead of the '+' to make your build consistent + compile 'com.google.endpoints:endpoints-framework:+' + compile 'com.google.endpoints:endpoints-management-control-appengine:+' + compile 'com.google.endpoints:endpoints-framework-auth:+' +} + +endpointsServer { + // Endpoints Framework Plugin server-side configuration + hostname = "echo-api.endpoints.${projectId}.cloud.goog" +} + +sourceCompatibility = 1.7 // App Engine Standard uses Java 7 +targetCompatibility = 1.7 // App Engine Standard uses Java 7 + +// this replaces the ${endpoints.project.id} in appengine-web.xml and web.xml +task replaceProjectId(type: Copy) { + from 'src/main/webapp/WEB-INF/' + include '*.xml' + into 'build/exploded-backend/WEB-INF' + expand(endpoints:[project:[id:projectId]]) + filteringCharset = 'UTF-8' +} +assemble.dependsOn replaceProjectId