Google App Engine

Testing and Deploying an API Backend

Testing an API backend follows the typical App Engine pattern of using the development server to run the web app locally during development and incremental testing, followed by deployment to production when you are ready for real-world testing.

Running and testing API backends locally

To test the API backend locally on the development server:

  1. Start the API backend by invoking the development app server:

    sdk-install-dir/bin/dev_appserver.sh --port=8888 path-to-your-app-war-dir
    
  2. After the API backend is started locally, test your API by sending a request using curl. Here is a sample invocation of curl to send a request to our sample tictactoe game:

    curl --header "Content-Type: application/json" -X POST -d '{"state": "----X----"}' http://localhost:8888/_ah/api/tictactoe/v1/board
    

Deploying an API backend

When you are satisfied that your API backend works as expected, you can deploy it to App Engine. Deploying an API backend is no different from deploying a regular App Engine app: full instructions for deploying are provided in the deploying and uploading topic.

To deploy:

  • Invoke the upload script as follows:

    ./appengine-java-sdk/bin/appcfg.sh update your-app-war-directory
    
  • Use the API Explorer to experiment with your API by visiting

    https://your_app_id.appspot.com/_ah/api/explorer
    
  • Alternatively, use the discovery service to view your API by visiting

    https://your_app_id.appspot.com/_ah/api/discovery/v1/apis
    
  • Checking for a Successful Deployment

    After you upload the API, you will see a success message if the files upload correctly. However, after the files are uploaded, App Engine does more work unpacking the API and deploying it. If there is a failure during this process, you are not informed about it. You must check the logs to determine success.

    To check the logs after you deploy your API,

    1. Visit the Google Developers Console.
    2. Click on your API project.
    3. Click on App Engine in the sidebar to the left.
    4. Click on Logs in the sidebar to the left.
    5. Look at the logs nearest in time to the time you deployed. A successful API deployment results in a log that looks something like this:

      013-09-30 18:39:09.781 Endpoints: https://2-dot-test-pont.appspot.com/_ah/api/helloWorld@v2 Saved
      

      or

      2013-09-30 16:07:17.987 Endpoints: https://7-dot-test2.appspot.com/_ah/api/guestbook@v1 OK
      

      An unsuccessful deployment has this kind of log:

       https://7-dot-test2.appspot.com/_ah/api/Guestbook@v2 ERROR
      

    If the logs indicate a deployment failure, try re-uploading your API.

    Deploying to multiple app versions

    When you deploy your backend API, you deploy it to the Cloud project ID you created for your API. This ID is the same one used by App Engine for your backend API. When you deploy, in addition to the App Engine/Cloud Project ID, you must also specify the App Engine version you deploy to. You specify the App Engine/Cloud Project ID in the <application> field in the /WEB-INF/appengine-web.xmlfile; you specify the application version in the <version> field. Notice that the App Engine app version is not the same thing as the backend API version number, which you specify in the version attribute of the @Api annotation.

    apiversions

    As shown in the figure above, you can deploy multiple API versions to the same App Engine App version. And, you can have many App Engine App versions.

    Accessing backend API versions deployed to an application default version

    The first App Engine version you deploy your backend API to is the default version. That remains the default version until you explicitly change it using the App Engine console, in the Versions link in the left nav panel:

    appversions

    As shown above, this sample backend API has two versions, with version 1 set as the default. Notice that you can change the default version in this UI.

    The App Engine default version is significant because that is the version running at the URL http://your_app_id.appspot.com. All of the backend API versions deployed to that App Engine app version can be accessed using that URL.

    Accessing backend API versions deployed to non-default application versions

    What if you want to access API versions that are not deployed to the default App Engine app version? In that case, you would use a version-specific URL.

    To access backend API versions that are deployed to non-default App Engine versions of your app, you must include the version specifier in the URL, like this: https://version-dot-your_app_id.appspot.com. For example, suppose your default app version is 1, but you want to access a backend API version deployed to App Engine app version 2; you would use this URL: https://2-dot-your_app_id.appspot.com.

    Managing your backend API versions

    In managing your API versions, consider these recommendations:

    • When you want to introduce an incremental, but non-breaking change, keep the API version constant and deploy over the existing API.
    • When you introduce a breaking change to your API, increment the API version.
    • For additional protection, increment the App Engine app version as well and then deploy the new API version to that new App Engine app version. This lets you use the built-in flexibility of App Engine to quickly switch between App Engine versions and serve from the old working versions if you run into unexpected problems.

    The following table is an illustration of cascading backend API versions to different App Engine app versions:

    App Version backend API version
    1
    • v1 --> v1 (2) --> v1 (n)
    2
    • v1 (n)
    • v2 --> v2 (2) --> v2 (n)
    3
    • v1 (n)
    • v2 (n)
    • v3 --> v3 (2) --> v3 (n)

    As shown in the table, incremental, non-breaking updates to v1 of the API are rolled out, each overwriting the previous version. When breaking changes are introduced, the API version is incremented to v2 and it is deployed to a new App Engine app version. That allows you to switch back to the previous app version if needed.

    In the table, notice that app version 2 supports both the latest v1 version and the new v2 version of your API. If you don't delete the existing v1 code from your project, deploying the project will result in both v2 and vl (n) of your API being deployed to App version 2.

    Authentication required

    You need to be signed in with Google+ to do that.

    Signing you in...

    Google Developers needs your permission to do that.