views:

995

answers:

5

From what I understand, a good REST URL for getting a resource would look like this:

/resource/{id}

The problem I have is, that I often need to get a large number of resources at the same time and don't want to make a separate http call for each one of them.

Is there a neat URL design that would cater for that or is this just not suitable for a REST api?

+1  A: 

will this work?

/resoruces/{resource-type}/{resource-id}/{resource-type}/{resource-id}
/{resource-type}/{resource-id}
TheVillageIdiot
+1  A: 

I ahve used in the past something like this.

/resources/a/d/

and that would return between x and Y a list.

something like

<resources>
  <resource>a</resource>
  <resource>b</resource>
  <resource>c</resource>
  <resource>d</resource>
</resources>

you could also put more advanced searches into the URL dpending on what resource actuall is.

Bluephlame
How would this approach work if it's not a range but random items?
Cory House
A: 

I'd say /resources/foo,bar,baz (separator may vary depending on IDs' nature and your aesthetic preferences, "foo+bar+baz", "foo:bar:baz", etc.). Looks a bit "semantically" neater than foo/bar/baz ("baz of bar of foo"?)

If resource IDs are numeric, maybe, even with a range shortcut like /resources/1,3,5-9,12

Or, if you need to query not exactly on resources with specifical IDs, but on group of resources having specific properties, maybe something like /resources/state=complete/size>1GiB/!active/...

drdaeman
feels very unrestful to me, to do it this way. At the very least define a new resource name scope, eg "range" that supports this.
Cheeso
+3  A: 

Based on your response, the answer to your question is to create a new resource that contains that single set of information. e.g.

GET /Customer/1212/RecentPurchases

Creating composite urls that have many identifiers in a single url limits the benefits of caches and adds unnecessary complexity to the server and client. When you load a web page that has a bunch of graphics, you don't see

GET /MyPage/image1.jpg;image2.jpg;image3.jpg

It just isn't worth the hassle.

Darrel Miller
rojoca
This seems to be the way to go.... However, it kind of raises the same question in a different form. What happens when I get all the product ids for the recent purchases back and need to get more information about them (name, picture) from somewhere else that only knows about products? How do I design the api for that?
George
You give a link to that resource, not an id.So in your RecentPurchases resource, you return<purchase href="/Purchases/21">And you let the client follow the links
serialseb
A: 

Hello,

maybe you could try with

[GET]/purchases/user:123;limit:30;sort_date:DESC