Some API resource flows require calling more than one service and combining the responses into a single response. This is often called "mashing up" service calls.
In this lab, you call a third-party service, extract data, and add the data to the target's API response.
Objectives
In this lab, you learn how to perform the following tasks:
Use a ServiceCallout policy to call a service.
Use custom JavaScript code to combine API responses.
Setup
For each lab, you get a new Google Cloud project and set of resources for a fixed time at no cost.
Sign in to Qwiklabs using an incognito window.
Note the lab's access time (for example, 1:15:00), and make sure you can finish within that time.
There is no pause feature. You can restart if needed, but you have to start at the beginning.
When ready, click Start lab.
Note your lab credentials (Username and Password). You will use them to sign in to the Google Cloud Console.
Click Open Google Console.
Click Use another account and copy/paste credentials for this lab into the prompts.
If you use other credentials, you'll receive errors or incur charges.
Accept the terms and skip the recovery resource page.
Activate Google Cloud Shell
Google Cloud Shell is a virtual machine that is loaded with development tools. It offers a persistent 5GB home directory and runs on the Google Cloud.
Google Cloud Shell provides command-line access to your Google Cloud resources.
In Cloud console, on the top right toolbar, click the Open Cloud Shell button.
Click Continue.
It takes a few moments to provision and connect to the environment. When you are connected, you are already authenticated, and the project is set to your PROJECT_ID. For example:
gcloud is the command-line tool for Google Cloud. It comes pre-installed on Cloud Shell and supports tab-completion.
You can list the active account name with this command:
[core]
project = qwiklabs-gcp-44776a13dea667a6
Note:
Full documentation of gcloud is available in the
gcloud CLI overview guide
.
Preloaded assets
These assets have already been added to the Apigee organization:
The retail-v1 API proxy
The oauth-v1 API proxy (for generating OAuth tokens)
The TS-Retail target server in the eval environment (used by retail-v1)
These assets will be added to the Apigee organization as soon as the runtime is available:
The API products, developer, and developer app (used by retail-v1)
The ProductsKVM key value map in the eval environment (used by retail-v1)
The ProductsKVM key value map entries backendId and backendSecret
The highlighted items are used during this lab.
Note:
Revision 1 of the retail-v1 proxy is marked as deployed, and is immutable. If you ever make a mistake in your proxy code that you can't recover from, you can select revision 1 and restart editing from there.
Note: This lab will call a proxied version of the Google Maps Geocoding API that only supports the latitudes and longitudes for the stores. It uses an API key that cannot be used directly with the Geocoding API.
If you want to create a Google Maps API key of your own (which requires a billing account) follow the directions on the Get Started documentation. You could then replace the key and the URL to call the Google Maps API directly.
Open a new browser tab and make a call directly to the API, using this URL for the benbrook location:
The response payload from the geocoding API call is the source, and the address from the response is stored in a variable named address.
Click Save, and then click Save as New Revision.
Click Deploy.
To specify that you want the new revision deployed to the eval environment, select eval as the Environment, and then click Deploy.
Click Confirm.
Check deployment status
A proxy that is deployed and ready to take traffic will show a green status on the Overview tab.
When a proxy is marked as deployed but the runtime is not yet available and the environment is not yet attached, you may see a red warning sign. Hold the pointer over the Status icon to see the current status.
If the proxy is deployed and shows as green, your proxy is ready for API traffic. If your proxy is not deployed because there are no runtime pods, you can check the provisioning status.
Check provisioning status
In Cloud Shell, to confirm that the runtime instance has been installed and the eval environment has been attached, run the following commands:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)'); echo "PROJECT_ID=${PROJECT_ID}"; export INSTANCE_NAME=eval-instance; export ENV_NAME=eval; export PREV_INSTANCE_STATE=; echo "waiting for runtime instance ${INSTANCE_NAME} to be active"; while : ; do export INSTANCE_STATE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/instances/${INSTANCE_NAME}" | jq "select(.state != null) | .state" --raw-output); [[ "${INSTANCE_STATE}" == "${PREV_INSTANCE_STATE}" ]] || (echo; echo "INSTANCE_STATE=${INSTANCE_STATE}"); export PREV_INSTANCE_STATE=${INSTANCE_STATE}; [[ "${INSTANCE_STATE}" != "ACTIVE" ]] || break; echo -n "."; sleep 5; done; echo; echo "instance created, waiting for environment ${ENV_NAME} to be attached to instance"; while : ; do export ATTACHMENT_DONE=$(curl -s -H "Authorization: Bearer $(gcloud auth print-access-token)" -X GET "https://apigee.googleapis.com/v1/organizations/${PROJECT_ID}/instances/${INSTANCE_NAME}/attachments" | jq "select(.attachments != null) | .attachments[] | select(.environment == \"${ENV_NAME}\") | .environment" --join-output); [[ "${ATTACHMENT_DONE}" != "${ENV_NAME}" ]] || break; echo -n "."; sleep 5; done; echo "***ORG IS READY TO USE***";
When the script returns ORG IS READY TO USE, you can proceed to the next steps.
Task 2. Verify that the address variable is populated
In this task, you use the debug tool to verify that the formatted address is retrieved from the geocoding API and extracted into the address variable.
On the left navigation menu, select Proxy development > API proxies, and then select the retail-v1 proxy.
Click the Debug tab, and then click Start Debug Session.
In the Start debug session pane, on the Environment dropdown, select eval.
Click Start.
Test the API proxy using private DNS
The eval environment in the Apigee organization can be called using the hostname eval.example.com. The DNS entry for this hostname has been created within your project, and it resolves to the IP address of the Apigee runtime instance. This DNS entry has been created in a private zone, which means it is only visible on the internal network.
Cloud Shell does not reside on the internal network, so Cloud Shell commands cannot resolve this DNS entry. A virtual machine (VM) within your project can access the private zone DNS. A virtual machine named apigeex-test-vm was automatically created for this purpose. You can make API proxy calls from this machine.
The curl command will be used to send API requests to an API proxy. The -k option for curl tells it to skip verification of the TLS certificate. For this lab, the Apigee runtime uses a self-signed certificate. For a production environment, you should use certificates that have been created by a trusted certificate authority (CA).
In Cloud Shell, open a new tab, and then open an SSH connection to your test VM:
This command retrieves a Google Cloud access token for the logged-in user, sending it as a Bearer token to the Apigee API call. It retrieves the retail-app app details as a JSON response, which is parsed by jq to retrieve the app's key. That key is then put into the API_KEY environment variable, and the export command is concatenated onto the .bashrc file which runs automatically when starting a the SSH session.
Note:
If you run the command and it shows API_KEY=null, the runtime instance is probably not yet available.
Debug the API
To get the store by ID, run this curl command in Cloud Shell:
curl -i -k -X GET -H "apikey:${API_KEY}" "https://eval.example.com/retail/v1/stores/benbrook"
In Debug, click on the GET request, and then click EV-ExtractAddress.
If you have successfully extracted the latitude and longitude, called the geocoding API, and extracted the formatted address, the address variable will be populated.
Task 3. Add the address to the target response
In this task, you use a JavaScript policy to insert the address into the target response.
Begin by adding a JavaScript policy that is executed after EV-ExtractAddress in the getStoreById flow.
Click Proxy endpoints > default > getStoreById.
On the Response getStoreById flow, click Add Policy Step (+).
In the Add policy step pane, select Create new policy, and then select Extension > Javascript.
Specify the following values:
Property
Value
Name
JS-AddAddress
Display name
JS-AddAddress
For Javascript file, select Create New Resource.
For Resource name, specify addAddress.js.
Click Add.
For Javascript file, select addAddress.js.
Click Add.
The four policies in the getStoreById response flow should look like this:
The JavaScript policy configuration does not need to be changed.
In the Navigator pane, click Resources > jsc > addAddress.js.
The code pane contains the addAddress.js Javascript code. It is currently empty.
To combine the responses, use this Javascript code:
// get the flow variable 'address'
var address = context.getVariable('address');
// parse the response payload into the responsePayload object
var responsePayload = JSON.parse(context.getVariable('response.content'));
try {
// add address to the response
responsePayload.address = address;
// convert the response object back into JSON
context.setVariable('response.content', JSON.stringify(responsePayload));
context.setVariable('mashupAddressSuccess', true);
} catch(e) {
// catch any exception
print('Error occurred when trying to add the address to the response.');
context.setVariable('mashupAddressSuccess', false);
}
This code parses the JSON response payload into an object, adds an address field to the object, and converts the object back into a JSON string, storing it in the response.
try/catch is used so that an exception isn't thrown out of the JavaScript policy. A fault is raised if an exception isn't caught.
Click Save, and then click Save as New Revision.
Click Deploy.
To specify that you want the new revision deployed to the eval environment, click Deploy, and then click Confirm.
Task 4. Verify that the address is returned in the response
In this task, you verify that the API call returns the address in the response payload.
In the Cloud Shell SSH session, to get the store by ID, run the following command:
curl -i -k -X GET -H "apikey:${API_KEY}" "https://eval.example.com/retail/v1/stores/benbrook"
If the address field is not in the response, use the debug tool to determine what is not working.
Congratulations!
In this lab, you mashed up the responses from two calls into a single response, adding a feature to your API proxy without modifying the backend service.
End your lab
When you have completed your lab, click End Lab. Google Cloud Skills Boost removes the resources you’ve used and cleans the account for you.
You will be given an opportunity to rate the lab experience. Select the applicable number of stars, type a comment, and then click Submit.
The number of stars indicates the following:
1 star = Very dissatisfied
2 stars = Dissatisfied
3 stars = Neutral
4 stars = Satisfied
5 stars = Very satisfied
You can close the dialog box if you don't want to provide feedback.
For feedback, suggestions, or corrections, please use the Support tab.
Copyright 2022 Google LLC All rights reserved. Google and the Google logo are trademarks of Google LLC. All other company and product names may be trademarks of the respective companies with which they are associated.
Los labs crean un proyecto de Google Cloud y recursos por un tiempo determinado
.
Los labs tienen un límite de tiempo y no tienen la función de pausa. Si finalizas el lab, deberás reiniciarlo desde el principio.
En la parte superior izquierda de la pantalla, haz clic en Comenzar lab para empezar
Usa la navegación privada
Copia el nombre de usuario y la contraseña proporcionados para el lab
Haz clic en Abrir la consola en modo privado
Accede a la consola
Accede con tus credenciales del lab. Si usas otras credenciales, se generarán errores o se incurrirá en cargos.
Acepta las condiciones y omite la página de recursos de recuperación
No hagas clic en Finalizar lab, a menos que lo hayas terminado o quieras reiniciarlo, ya que se borrará tu trabajo y se quitará el proyecto
Este contenido no está disponible en este momento
Te enviaremos una notificación por correo electrónico cuando esté disponible
¡Genial!
Nos comunicaremos contigo por correo electrónico si está disponible
Un lab a la vez
Confirma para finalizar todos los labs existentes y comenzar este
Usa la navegación privada para ejecutar el lab
Usa una ventana de navegación privada o de Incógnito para ejecutar el lab. Así
evitarás cualquier conflicto entre tu cuenta personal y la cuenta
de estudiante, lo que podría generar cargos adicionales en tu cuenta personal.
In this lab, you'll invoke multiple services and combine their responses.
Duración:
14 min de configuración
·
Acceso por 90 min
·
90 min para completar