REST URL design - multiple resources in one HTTP c

2020-02-18 04:13发布

问题:

This question already has an answer here:
Closed 7 years ago.

Possible Duplicate:
Rails 3 Custom Route that takes multiple ids as a parameter

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 do not 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:

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.



回答2:

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/...



回答3:

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.



回答4:

maybe you could try with

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