0.17.0¶ ↑
Features¶ ↑
Response mime type decoders (json, form)¶ ↑
gitlab.com/os85/httpx/-/wikis/Response-Handling#response-decoding
Two new methods, #json
and #form
, were added to HTTPX::Response
. As the name implies, they’ll decode the raw payload into ruby objects you can work with.
# after HTTPX.get("https://api.smth/endpoint-returning-json") response.json # same as JSON.dump(response.to_s)
Although not yet documented, integrating custom decoders is also possible (i.e. parsing HTML with nokogiri
or something similar).
Improvements¶ ↑
Connection: reduce interest calculations¶ ↑
Due to it being an intensive task, internal interest calculation in connections was reduce to the bare minimum.
Immutable Options, internal recycling of instances, improves memory usage in the happy path¶ ↑
A lot of effort went into avoiding generating options objects internally whenever necessary. This means, when sending several requests with the same set of options (the most common case in httpx
usage), internally only one object is passed around. For that, the following improvements were done:
-
Options#merge
returns the same options the the options being merged are a subset of the current set of options (b126938a6547e09b726dd64298fb488891d938e9). -
Session#build_request
bypasses instantiation of options if it receives anOptions
object (which happens internally in the happy path, if users don’t call#build_request
directly) (3d549817cb41d4b904102fdc61afe3ecd9170893). -
Improving internal
Session
APIs to not pass around options, and instead rely on accessing request options. -
Options#to_hash
does not build internal garbage arrays anymore (cc02679b804f63798f5d2136a039be1624e96ab6).
Reduce regexp operations in the HTTP/1 parser¶ ↑
Some code paths in the HTTP/1 parser still using regular expressions were replaced by string operations accomplishing the same.
HTTP/1 improvements on the complexity of connection accounting calculations¶ ↑
Managing open HTTP/1 connections relies on operations calculating whether there are requests waiting for completion. This relied on traversing all requests for that connectionn (O(n)); it now only checks the completion state of the first and last request of that connection, given that all requests in HTTP/1 are sequential (O(1)); this optimization brings a big improvement to persistent and pipelined requests (65261217b1270913e4bb93717e8b8dcfa775565a).
Bugfixes¶ ↑
-
fixing HTTP/1 protocol uncompliant exposing multiple values for the "Host" header (e435dd0534314508262184fb03d83124d89d2079).
-
Custom response finalizer introduced in 0.16.0 has been reverted. It was brought to my attention that
Tempfile
implementation already takes care of the file on GC (andhttpx
was duplicating), and the approach taken inhttpx
was buggy in several ways (not tolerant to forks, never recycled finalizers...) (aa3be21c890f92a41afcc7931f01dd24cc801f7c).
Chore¶ ↑
RBS Typing improvements based on latest stdlib signatures additions, such as openssl
, digest
, socket
and others.