URL con formato REST adecuado con rangos de fechas

I have a REST URL to get all users formatted like this: http://example.com/users

To get an individual user by id: http://example.com/users/12345

To get all user's bids: http://example.com/users/12345/bids

To get all user's bids between two dates: http://example.com/users/12345/bids/?start=01/01/2012&end=01/31/2012

o debería ser así: http://example.com/users/12345/bids/start/01012012/end/01312012

I'm leaning towards the 1st date range URL as start and end are not entities in the domain. What is the proper way to format a REST URL with a date range?



preguntado el 09 de marzo de 12 a las 16:03

I would suggest putting the dates in ISO 8061 format: 2012-01-31. This avoids uncertainty about whether it's month-day-year or day-month-year. -

If you use the path separator / to delimit the values you're likely to encounter numerous issues. If you decide you want the start and end dates to allow ISO formats e.g. 2021-10-12T01:00:00.000Z, 2021-10-01T18:00:00.000+05:00, those formats contain characters that will break the URL. Much better to use querystring parameters -

3 Respuestas


Have the query parameters on the same "level" as the bids (remove the slash before the question mark). But you would probably want to have support for if they only provide one query parameter. So if they only provided "start" then it would get all bids after that date, or if they only provided "end" it would get all bids before that date.

The reasoning being that query parameters are good for GETting a subset of results from a GET request. They don't go on another level because the next level is usually one specific item with a unique identifier.

respondido 09 mar '12, 17:03

blog posts and senior colleagues I think? I probably shouldn't have been answering StackOverflow questions straight out of college, but I guess it worked out. - smcg

If it's not too much to ask, it might help if you could add some guidelines/documentation or good reads on the topic :) - RBz

Yo iria con http://example.com/users/12345/bids?start=2012-01-01&end=2012-01-31.

  • There shouldn't be a slash before the query string.
  • Avoid using slashes in the query string. It'll be easier that way.

contestado el 08 de mayo de 17 a las 06:05

well then one should probably also use an internationally readable date format, which would be 2012-01-31 de acuerdo a es.wikipedia.org/wiki/ISO_8601. MDY is literally USA-only ..... en.wikipedia.org/wiki/Date_format_by_country - phil294

if example.com/users/12345 gets the user with id 12345, then to get all users by id it should be example.com/users with the id included in the response as a relationship. (usually a hyperlink to that resource).

Now to get them by date ranges it should be example.com/users/start=01-01-2012&end=01-31-2012

The 12345 part is the id of an individual user, it's a resource, therefore it should not be included to get the rest of the users.

As the name of the parameter it should be meaningful. start could mean anything, but start_date is more meaninful.

Respondido 22 Abr '14, 15:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.