How do you do this for intersystem interfaces? Tell the client he wants to create an order on the server http://my.server.org he must find out that it is supposed to use the URL http://my.server.org/newOrder to create in the order, and not http: // my .server.org / nO or anything else?
He does not study. Machine clients, as a rule, cannot "learn". Not yet, at least we're still up to Skynet. You must "teach" them.
But what’s the key is that you don’t learn their URLs. You teach them relationships.
Consider in HTML ...
<a rel="order" href="http://my.server.org/newOrder"/>
and
<a rel="order" href="http://my.server.org/nO"/>
You will notice that rel is the same, "order", but the URL is not specified.
In the "ideal" world, the system will have a single entry point, say, http://my.server.org/ , and from there the client can find all the links that he needs to know.
In practice, many systems have several “well-known” and defined entry points from which the client can start, as well as the advisability that the client does not start from the root of the system. These well-known entry points imply a provider commitment that these URLs will not change anytime soon. They live for a long time, and the server will support them very well.
But once passing the entry point, any URL that you discover most likely does not have such a promise. A URL can be only one URL. It can be directed to different machines, for example, load balancing. Who knows. But as a consumer of the service, you really don't care what the URL is, you only care about the relationship. This relationship tells you the details of the URL used.
The documentation for your hypermedia API explains how to apply a single interface to each of the links your client will encounter. The client also cannot "intuitively", it needs to be trained.
In principle, teaching a client how to navigate in a relationship that he will or CAN find in useful data, he processes how the client manipulates the hypermedia API. The payloads contain iconic messages to show the path, but the server dictates where these messages go.
How often it is used, probably not very much in a machine for the machine world. Most systems are not large enough when URLs change so much that they matter and there are so few clients that changing clients is not a significant burden. Thus, the simplest code is missing.
But then, in the end, you just have bad customers. Nothing a REST system can do with a bad client. In any case, he cannot distinguish them at runtime.