Depending on your architecture, you can use some really cool software like Weave with CoreOS (https://github.com/weaveworks/weave). We are using Docker to distribute our applications onto the CoreOS nodes, and then the internal DNS is handled by Weave.
This is really great because we can just forward the request through to the application name with a port, and then we are off and away.
For example, a user requests application.com/api/apiName/request/path
Our gateway was implemented with Node.js, and it takes the apiName after /api to route it to that api, and then the following path of the URL to append to the call itself.
So the request from the gateway would be proxied internally as apiName:8080/request/path. In that regard, the API requires no changes when new services come up, as the path is created dynamically from your request.
This is great because we don't have to worry about tracking paths from the different API's and storing them somewhere.
If not that, you would have to maintain some (probably external) list of endpoints to make it easier for you. This could be done programmatically from the API's themselves.
I'm not sure what your requirements are, however, and as Will has answered, it does incur a pretty big infrastructure cost. However, our releases are fast and painless because we don't have to worry about making code changes in multiple layers, and the new API's get our gateway proxying, logging, and authentication for free.
product
service that you want to access and gateway will proxy it. – Slaw