gislikonrad
gislikonrad

Reputation: 3581

Getting a list of target endpoints

Can I get a list of target endpoints in a javascript policy?

Let's say I have a proxy endpoint that connects to multiple target endpoints. Can I write a javascript policy so that if a request is made to a specific url on that proxy, it will make a call to all the target endpoints and aggregate the results?

Upvotes: 0

Views: 1389

Answers (2)

Argo
Argo

Reputation: 26

Yes that's possible. The apiproxy definition itself holds all the target endpoints defined for it.

For example: curl -v https://api.enterprise.apigee.com/v1/o/{org}/apis/{api}/revisions/{rev}/targets

would give you the list of all targets. Then you can get each target URL from the list by calling:

curl -v https://api.enterprise.apigee.com/v1/o/{org}/apis/{api}/revisions/{rev}/targets/{target}

You can parse out each URL in a for loop and then make a request to each of these URLs. If your requests a simple GET calls without any variation in the request object like headers, body etc. then a simple for loop would be good enough.

For example: var geocoding = httpClient.get(URL); context.session["geocoding"] = geocoding;

This piece of code can be called in a loop for all the target endpoints that you might have.

The only catch here is that, to get the target endpoints you are making a management api call from the runtime layer. Which means if at any point of time the Apigee management layer is down for maintenance or experiencing degraded service due to scheduled maintenance, your runtime calls would tend to fail. The other solution could be to isolate the two scripts:

  • Get the list of endpoints in one javascript and maybe store the URLs in cache (populateCache policy) or keyvaluemaps (given that proxy endpoint URLs won't change too often)

  • Read the list of endpoints from cache or kvm and then trigger another javascript that can make calls to these endpoints and then aggregate the response.

Upvotes: 1

Mike Dunker
Mike Dunker

Reputation: 1990

There is not a way to call a target endpoint from JavaScript. In fact, you can only call 0 or 1 target endpoints for a single call to the proxy, not multiple target endpoints.

You can call make multiple HTTP requests from within JavaScript using httpClient, and aggregate the results, but not target endpoints. An example of this is found here.

Upvotes: 0

Related Questions