Maybe this helps:

https://github.com/svenvc/zinc/commit/d9fe41707b16748b9340540127ec5d77800856b6

> On 1 Nov 2021, at 21:22, Sven Van Caekenberghe <s...@stfx.eu> wrote:
> 
> 
> 
>> On 1 Nov 2021, at 20:03, Esteban Maringolo <emaring...@gmail.com> wrote:
>> 
>> If I need to use cookies, would it make sense to keep a ZnUserAgentSession 
>> and assign it to each new client?
> 
> I don't know or remember, my first reaction would be to say that it was not 
> designed for that purpose, but maybe it could be used for that.
> 
>> I'm asking this in case I have to share cookies between requests. But the 
>> session variable seems to be private in ZnClient given that it doesn't 
>> provide any setter.
> 
> There is the cookie jar object inside the session, maybe you can try to share 
> that ?
> 
> Or you could copy the necessary cookies over ? That certainly seems like the 
> safest thing.
> 
>> Regards,
>> 
>> Esteban A. Maringolo
>> 
>> 
>> On Mon, Nov 1, 2021 at 1:39 PM Esteban Maringolo <emaring...@gmail.com> 
>> wrote:
>> Thank you Sven.
>> 
>> I'll go with instantiating a new client for each request, the less state 
>> shared, the better :-)
>> 
>> Regards!
>> 
>> Esteban A. Maringolo
>> 
>> 
>> On Fri, Oct 29, 2021 at 12:15 PM Sven Van Caekenberghe <s...@stfx.eu> wrote:
>> Hi,
>> 
>>> On 29 Oct 2021, at 15:42, Esteban Maringolo <emaring...@gmail.com> wrote:
>>> 
>>> Hi,
>>> 
>>> I happened to me more than once that I have to create some REST service 
>>> "client" in which I usually wrap an HTTP client inside (ZnClient in this 
>>> case), and all the calls to the service, end up using the HTTP client, 
>>> inside some mutex to serialize the execution.
>> 
>> Yes, that is a good design. However, whether your REST client object 
>> wrapping a ZnClient is used by multiple concurrent threads is another 
>> decision. I would personally not do that. See further.
>> 
>>> But I don't like that, in particular when some endpoints are better with 
>>> streaming responses (large downloads) and I have to fiddle with the client 
>>> and set it back to the settings before executing the request.
>> 
>> You only can and should reuse connections to the same endpoint/service only, 
>> doing similar types of request/responses (let's say simple ones).
>> 
>> A definitive danger point is authentication and authorization: different 
>> calls by different users might need different REST call settings, each time. 
>> Also, caching can be a problem, if user A can see / sees the cache of user B.
>> 
>>> So, long story short... is it always safer to instantiate a new ZnClient on 
>>> a per request basis since no state is shared, but I guess it is also less 
>>> effective if I'm performing several requests to the same server.
>> 
>> A new instance is definitely safer because it is cleaner. Reusing a 
>> connection is more efficient when doing multiple calls in (quick) 
>> succession. The penalty is usually pretty low, you can postpone optimising 
>> until there is an actual problem.
>> 
>> Error handling and recovery are also harder in the reuse case (what state is 
>> the connection in ?).
>> 
>> ZnClient does a form of automatic reconnection/retry though.
>> 
>>> What are the recommended approaches here?
>>> 
>>> 
>>> Esteban A. Maringolo
>> 
>> HTH,
>> 
>> Sven
> 

Reply via email to