Idiom to construct a URI with a query string in Elixir

风流意气都作罢 提交于 2021-02-20 09:59:13

问题


I'm wondering what the most idiomatic way is to use URI to add a query string to a base URI in Elixir.

I'm currently doing something like this:

iex(1)> base = "http://example.com/endpoint"
"http://example.com/endpoint"

iex(2)> query_string = URI.encode_query(foo: "bar")
"foo=bar"

iex(3)> uri_string = URI.parse(base) |> Map.put(:query, query_string) |> URI.to_string
"http://example.com/endpoint?foo=bar"

But was wondering if there is a cleaner way to set the query string. I know about URI.merge/2, but I don't think a query string is a valid URI, so that's probably not approriate here (the ? will not be added).

I could also do something like:

uri_string = %URI{ URI.parse(base) | query: query_string } |> URI.to_string

But I'm wondering if there is a simpler or clearer method I've missed.


回答1:


I think your first example, with some formatting, reads pretty well:

uri_string =
  base_url
  |> URI.parse()
  |> Map.put(:query, URI.encode_query(params))
  |> URI.to_string()

I'm not aware of other idioms/shortcuts.




回答2:


I'm not sure that it's more idiomatic but you can do simple string interpolation if you know the string you're trying to build.

uri_string = "#{base}?#{query_string}"


来源:https://stackoverflow.com/questions/49508509/idiom-to-construct-a-uri-with-a-query-string-in-elixir

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!