Use GET.
The fact that the data changes each time a client accesses it is not a reason not to use GET. You are not POSTing any data to the web server, you are merely GETting the current state of the resource. That state may be constantly changing, for example GET /currenttime.html
will constantly change each time you request it. There isn't anything in the HTTP spec that says that a client should expect that a resource does not change between GETs. The server can update the resource what ever way it sees fit, either internally or due to other clients updating the resource. A client should never assume that a resource has not changed since it last got its state.
It is though a reason to use an ETag in the response header to let the client (and any caching in between) know what the server has changed the resource since the client last accessed it. A client can compare the ETags to know that the resource has changed.
http://en.wikipedia.org/wiki/HTTP_ETag
GET
. UsingPOST
would maybe keep crawlers from following it if that's what you want though you could do this with robots.txt I guess (if this is used on websites at all?). AlsoGET /resource/recommendations
, so plural since several items are returned? (Personally I break the singular/plural rules sometimes e.g. when implementing a controller like/search
).GET
.GET
on a product and somebody else changes that product your nextGET
will not return the same product. It's not as if aGET
would expect 100% identical results for each call. Ok, in this case the call itself has some kind of 'randomizing' side effect maybe (is this somehow stored on the server to ensure that no results are duplicate? This would be some kind of data manipulation at least). It makes it a bit tricky to decide but it seems not to change the resource as such and just have random effects.