I have a route on my server /registered_contacts, which takes as params a long array of ids, lookups up which of those ids are registered in the database, and returns that subset.
Which HTTP method should this be?
It's currently a GET request since I figured it's GET'ing something, but then I'm also a bit uneasy with the long array of ids, which ends up making a request to an endpoint like:
www.server.com/registered_contacts?ids[2]=bob&ids[54]=jon&ids[23]=jack...etc. etc.
One could argue that I'm not actually getting a remote "thing" like /registered/contacts/42, one could also argue that it is a resource which I am neither updating, deleting, or creating... so that leaves getting?
(One worry I also have there is the header getting larger than a packet size, not sure if that becomes an issue)
Assuming you don't run in to some GET command length limit, which do exist, you're fine.
Another mechanism is to take your criteria, POST it to a "filter" resource, and then take the resulting URI from that, and then use that URI as the argument for the GET.
Create the filter:
POST /filter
ids[2]=bob......
Result:
HTTP/1.1 301 Moved Permanently
Location: /filter/1234
Use the filter:
GET /registerd_contacts?filter=http://example.com/filter/1234
Your filters are a first class resource that you can CRUD if you like, or they can "go away" in a day, or whatever you want.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With