Andy
Andy

Reputation: 686

Web API Best Practice for Deep Object Routes

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

Answers (2)

jsiegal
jsiegal

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

maxmantz
maxmantz

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

Related Questions