I don't realize what is the difference between that URI http://services.odata.org/OData/OData.svc/Categories(1)/Products
and http://services.odata.org/OData/OData.svc/Categories(1)/$links/Products
. In http://www.odata.org/documentation/uri-conventions/#AddressingLinksBetweenEntries documentation explanation is not clear enough.
The first one traverses the navigation property (Products) in this case and will return a feed of Product entities (all the Products which are related to the Category with ID 1).You can imagine this as accessing the value of the navigation property. It lets you access "the other side" of the navigation property.
The second one is used to address the relationship itself. It returns a list of URLs which address the Products, but it won't return the entities themselves. GET on the $links URL is usually not too useful (sometimes it can be). This URL is much more important for updates. For example if you have an existing Category with ID 1 and an existing Product with ID 42 and you want to make that product belong to that category you would send a POST to the $links URL above and in the payload you would send a URL to the Product with ID 42. And that would create a relationship between the two entities. The $links URL lets you access "the links" of the navigation property.