[Progress Report] Zinc HTTP Components

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[Progress Report] Zinc HTTP Components

Sven Van Caekenberghe
Here is a quick progress report regarding the Zinc HTTP Components project.
Please check the SqueakSource history for a all the details.
The external documentation has not yet been updated ;-)

I am very pleased that Matt Kennedy joined the project as a developer and
is contributing lots of really important and interesting code - way to go Matt!

Some highights are:

- we now have cookie handling, authentication and credential objects
- there is a new ZnUserAgent client that can do advanced authentication
  handles cookies, sessions and that can follow redirects
- there is a ZnFixedClient that can reuse a connection to the same host/port
- there is support for client side chunked and gzip decoding
- there is an experimental server that keeps connections alive (unfinised)
- support classes ZnUserAgentSession and ZnUserAgentSession
- lots of refactorings, fixes and portability improvements
- the number of unit tests has increased to 71

Sven



_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: [Progress Report] Zinc HTTP Components

Stéphane Ducasse
Cool!

Stef

On Oct 1, 2010, at 10:04 AM, Sven Van Caekenberghe wrote:

> Here is a quick progress report regarding the Zinc HTTP Components project.
> Please check the SqueakSource history for a all the details.
> The external documentation has not yet been updated ;-)
>
> I am very pleased that Matt Kennedy joined the project as a developer and
> is contributing lots of really important and interesting code - way to go Matt!
>
> Some highights are:
>
> - we now have cookie handling, authentication and credential objects
> - there is a new ZnUserAgent client that can do advanced authentication
>  handles cookies, sessions and that can follow redirects
> - there is a ZnFixedClient that can reuse a connection to the same host/port
> - there is support for client side chunked and gzip decoding
> - there is an experimental server that keeps connections alive (unfinised)
> - support classes ZnUserAgentSession and ZnUserAgentSession
> - lots of refactorings, fixes and portability improvements
> - the number of unit tests has increased to 71
>
> Sven
>
>
>
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: [Progress Report] Zinc HTTP Components

Lukas Renggli
Wow, very impressive.

What I would like to see is some kind of high-level API for convenient
access to all features. Something along

response := ZnHttp new
    url: 'http://www.foo.com';
    userAgent: 'FakeAgent';
    cookieAt: 'something' put: '123';
    parameterAt: 'q' put: 'smalltalk';
    onFailure: [ :error | self inform: 'failed' ];
    onProgress: [ :status | ... ];
    get

Lukas

On 1 October 2010 13:52, Stéphane Ducasse <[hidden email]> wrote:

> Cool!
>
> Stef
>
> On Oct 1, 2010, at 10:04 AM, Sven Van Caekenberghe wrote:
>
>> Here is a quick progress report regarding the Zinc HTTP Components project.
>> Please check the SqueakSource history for a all the details.
>> The external documentation has not yet been updated ;-)
>>
>> I am very pleased that Matt Kennedy joined the project as a developer and
>> is contributing lots of really important and interesting code - way to go Matt!
>>
>> Some highights are:
>>
>> - we now have cookie handling, authentication and credential objects
>> - there is a new ZnUserAgent client that can do advanced authentication
>>  handles cookies, sessions and that can follow redirects
>> - there is a ZnFixedClient that can reuse a connection to the same host/port
>> - there is support for client side chunked and gzip decoding
>> - there is an experimental server that keeps connections alive (unfinised)
>> - support classes ZnUserAgentSession and ZnUserAgentSession
>> - lots of refactorings, fixes and portability improvements
>> - the number of unit tests has increased to 71
>>
>> Sven
>>
>>
>>
>> _______________________________________________
>> Pharo-project mailing list
>> [hidden email]
>> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>
>
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
>



--
Lukas Renggli
www.lukas-renggli.ch

_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: [Progress Report] Zinc HTTP Components

Sven Van Caekenberghe
Lukas,

On 01 Oct 2010, at 14:10, Lukas Renggli wrote:

> What I would like to see is some kind of high-level API for convenient
> access to all features. Something along
>
> response := ZnHttp new
>    url: 'http://www.foo.com';
>    userAgent: 'FakeAgent';
>    cookieAt: 'something' put: '123';
>    parameterAt: 'q' put: 'smalltalk';
>    onFailure: [ :error | self inform: 'failed' ];
>    onProgress: [ :status | ... ];
>    get

A bit like Gofer I guess...

It certainly looks cool, the code above.

I'll have to think a little bit about that approach.

How should such an object handle wrong use of the API ?
What if I don't specify an url, do the get before setting the cookie, ...
It feels as if there will be little feedback in terms of errors, no ?

Sven


_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: [Progress Report] Zinc HTTP Components

Lukas Renggli
>> response := ZnHttp new
>>    url: 'http://www.foo.com';
>>    userAgent: 'FakeAgent';
>>    cookieAt: 'something' put: '123';
>>    parameterAt: 'q' put: 'smalltalk';
>>    onFailure: [ :error | self inform: 'failed' ];
>>    onProgress: [ :status | ... ];
>>    get
>
> A bit like Gofer I guess...

Yeah, the pattern is always the same :-)

Seaside rendering, Gofer loading, Magritte description, ...

> It certainly looks cool, the code above.
>
> I'll have to think a little bit about that approach.

The idea is that reasonably complex scenarios can be written as a
single expression.

> How should such an object handle wrong use of the API ?
> What if I don't specify an url, do the get before setting the cookie, ...
> It feels as if there will be little feedback in terms of errors, no ?

If you forget to specify an URL you'll likely get an exception at some
(later) point.

If you forget or do something after #get, #put, #delete, #head, ... it
has no effect. Also you don't get the result, which is returned from
these methods.

In my opinion the missing feedback is not a problem in practice,
people just have to remember to do the action last.

Lukas

--
Lukas Renggli
www.lukas-renggli.ch

_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: [Progress Report] Zinc HTTP Components

Matt Kennedy
In reply to this post by Lukas Renggli
Hi everyone,

On Oct 1, 2010, at 8:10 AM, Lukas Renggli wrote:

> Wow, very impressive.
>
> What I would like to see is some kind of high-level API for convenient
> access to all features. Something along
>
> response := ZnHttp new
>    url: 'http://www.foo.com';
>    userAgent: 'FakeAgent';
>    cookieAt: 'something' put: '123';
>    parameterAt: 'q' put: 'smalltalk';
>    onFailure: [ :error | self inform: 'failed' ];
>    onProgress: [ :status | ... ];
>    get
>
> Lukas
>

This is actually where I'd like to head with the client API. I had started my own HTTP client about 2 days before Sven announced Zinc, so it made more sense contribute to his project. My initial work was a subclass off of ProtocolClient and was kind of monolithic, so my first steps have been to make things mesh nicely with Zinc.

My initial prototype before I started working on Zinc had a very similar API to your example, so my thoughts are definitely aimed for that direction.

Matt
_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
Reply | Threaded
Open this post in threaded view
|

Re: [Progress Report] Zinc HTTP Components

Stéphane Ducasse
In reply to this post by Lukas Renggli
Matt Sven I love to see your framework emerging like that.
Keep pushing. This is a warm feeling for us (with our head in the gory details of the system) so see that other people
are creating cool abstractions on top of it.

Stef


> Hi everyone,
>
> On Oct 1, 2010, at 8:10 AM, Lukas Renggli wrote:
>
>> Wow, very impressive.
>>
>> What I would like to see is some kind of high-level API for convenient
>> access to all features. Something along
>>
>> response := ZnHttp new
>>   url: 'http://www.foo.com';
>>   userAgent: 'FakeAgent';
>>   cookieAt: 'something' put: '123';
>>   parameterAt: 'q' put: 'smalltalk';
>>   onFailure: [ :error | self inform: 'failed' ];
>>   onProgress: [ :status | ... ];
>>   get
>>
>> Lukas
>>
>
> This is actually where I'd like to head with the client API. I had started my own HTTP client about 2 days before Sven announced Zinc, so it made more sense contribute to his project. My initial work was a subclass off of ProtocolClient and was kind of monolithic, so my first steps have been to make things mesh nicely with Zinc.
>
> My initial prototype before I started working on Zinc had a very similar API to your example, so my thoughts are definitely aimed for that direction.
>
> Matt
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project


_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project