Reputation: 686
When designing a RESTful API with ASP.NET Web API, I can create several routes to retrieve the same data. But should I? Is it considered helpful or confusing?
For example, if I have an object relationship of Parent > Child > Item, I could potentially have three routes return the same individual item:
Is it useful to provide all three routes, or should it be limited to the simplest route to avoid confusion? Is there a best practice in this regard?
Upvotes: 6
Views: 1525
Reputation: 23
If the user has access to the lowest-level unique identifier (:item in your case), then they should just call
api/items/:item
the information about the parent would be redundant / irrelevant.
i would go:
api/parents
api/parents/:parentid
api/parents/:parentid/children
api/children
api/children/:childid
api/children/:childid/items
api/items
api/items/:itemid
Upvotes: 0
Reputation: 712
Choosing which URIs/routes to use is a matter of the desired purpose, not content. Is it possible or propable that a user would look for a child without having a specific parent in mind? If yes, offer the data in a seperate root URI, if not, restrict access to the child data by requiring the user to provide a parentId.
The URI api/children
would return all children regardless of their parents and therefore fulfills another purpose than api/parents/:parentId/children
which would only return the children the :parentId instance actually has a reference to. The result will always contain data that can also be obtained using api/children
, but it carries additional information because these children 'belong' to the specified parent.
In my opinion all of your options are valid because they all have different purposes. However I would avoid using different URIs for the same purpose.
Upvotes: 4