Open saurabhnanda opened 6 years ago
@saurabhnanda that is a great question! I think we have only covered it in some discussions on GitHub, but have not moved any of it into Haddock documentation.
First, if you're looking for a function that does URL-encoding, see toEncodedUrlPiece
.
http-api-data
basically tries to parse Text
/ByteString
that is received via HTTP APIs.
In the spirit of "let a function do one job well" we don't try to perform the decoding/encoding (whether it be URL-encoding or UTF8 or something else). At least not in the class methods.
This can be beneficial for when your web framework already does encoding/decoding for you. Or when you encode/decode the whole query string or request body.
Hope this answers your question :)
This can be beneficial for when your web framework already does encoding/decoding for you.
I just ran into this from servant(-client) and was pretty surprised. A route that Capture
s Text
doesn't encode it at all!
I'm running into this issue again. Till the time there is a better solution available for #143 , I'm converting my Haskell record to a JSON and using that for toQueryParam
& parseQueryParam
Should I be url-encoding this JSON, or not?
If I don't urlencode it, the JSON shows up as-is when using safeLinks from servant.
I was trying to write my own
ToHttpApiData
instance for a newtype wrapper over text, and ended up looking at the existing instance forText
and was surprised to find that it isn't really url-encoding the data. Why is this the case? Isn't the idea of this type-class to convert a value to be safe for usage in URLs (either as path fragments or query-params)?If
ToHttpApiData
is not supposed to emit url-encoded stuff, what is the type-class/function/mechanism that does it?