You could match like so:
def show(conn, %{"m" => messenger} = params) do
# do something with params
conn
|> assign(:message, messenger)
|> render(:show)
end
or
def show(conn, %{"m" => messenger, "other" => other}) do
# do something with other
conn
|> assign(:message, messenger)
|> render(:show)
end
I believe a function head match error results in a 400, while a match error in the body results in a 500. So, if you want an accurate API response, it’s simpler to do all the matching of required params in the function head. Otherwise, you’ll want to be more conservative in the function body when checking params. Like you mentioned, another valid approach is to use a changeset.


















