HTTP GET request with array argument

I’m implementing a GET request to return a list of database records like the standard “index” method generated by phx.gen. But my method should filter the result, i.e. the client requests only a specific set of IDs. At first, I wanted to send the list of IDs in a JSON array in the request body, but I’ve seen that the specification for GET doesn’t recommend to have any body (and Phoenix does not return it by default).

So my guess is I should probably use URL query string, but I’m not sure how to format it, that my Phoenix controller can easily extract it as an array.

Example: Let’s say I want to request the list for IDs “12bb23d2-81fe-445b-bf5e-2716f582fbb0” and “654802aa-4515-4b52-b9a1-d74bf43f074b”.

Would the URL be something like
a) /api/sync/?ids=“12bb23d2…”,“654802aa…”
b) /api/sync/?ids=“12bb23d2…”&ids=“654802aa…”
c) /api/sync/?ids[]=“12bb23d2…”&ids[]=“654802aa…”
d) …

And how would you read that in the controller?

Try option c, it should be supported by default in Phoenix IIRC. You should be able to find the array in the request params like %{"ids" => ["12bb23d2...", "654802aa..."]}.

1 Like

Brilliant, works as expected without any special parsing. Thanks!