akka/akka-http

akka.http.scaladsl.model.Uri apply() methods should not take charset and mode as arguments?

Open

#395 opened on Oct 15, 2016

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Scala (598 forks)batch import
1 - triagedhelp wanted

Repository metrics

Stars
 (1,311 stars)
PR merge metrics
 (Avg merge 1d 10h) (2 merged PRs in 30d)

Description

This was discussed in Akka User Group, and the review discussion which was in akka/akka#18715.

sirthias on Oct 13, 2015 IMHO neither the charset nor the mode is a property of the URI.

Now that the Uri.query() method takes charset and mode as arguments after the above PR 18175 was merged.

Then, I think we should deprecate Uri's apply() methods which take charset and mode arguments? Otherwise there could be confusing use like below.

val uri = Uri("http://localhost?a^=b", mode=Uri.ParsingMode.Relaxed)

println(uri.query(mode=Uri.ParsingMode.Relaxed).get("a^"))
//prints Some(b)

println(uri.query(mode=Uri.ParsingMode.Strict).get("a^"))
//!!! You pass a different mode after Uri's apply() was called, and get a different result !!!
//IllegalUriException: Illegal query: Invalid input '^', expected '+', '=', query-char, 'EOI', '&' or pct-ncoded (line 1, column 2): a^=b

Contributor guide