Curl support RFC
Lutger Blijdestijn
lutger.blijdestijn at gmail.com
Sat Mar 12 11:36:30 PST 2011
Jonas Drewsen wrote:
> On 11/03/11 22.21, Jesse Phillips wrote:
>> I'll make some comments on the API. Do we have to choose Http/Ftp...? The
>> URI already contains this, I could see being able to specifically request
>> one or the other for performance or so www.google.com works.
>
> That is a good question.
>
> The problem with creating a grand unified Curl class that does it all is
> that each protocol supports different things ie. http supports cookie
> handling and http redirection, ftp supports passive/active mode and dir
> listings and so on.
>
> I think it would confuse the user of the API if e.g. he were allowed to
> set cookies on his ftp request.
>
> The protocols supported (Http, Ftp,... classes) do have a base class
> Protocol that implements common things like timouts etc.
>
>
>> And what about properties? They tend to be very nice instead of set
>> methods. examples below.
>
> Actually I thought off this and went the usual C++ way of _not_ using
> public properties but use accessor methods. Is public properties
> accepted as "the D way" and if so what about the usual reasons about why
> you should use accessor methods (like encapsulation and tolerance to
> future changes to the API)?
>
> I do like the shorter onHeader/onContent much better though :)
>
> /Jonas
Properties *are* accessor methods, with some sugar. In fact you already have
used them, try it:
http.setReceiveHeaderCallback = (string key, string value) {
writeln(key ~ ":" ~ value);
};
Marking a function with @property just signals it's intended use, in which
case it's nicer to grop the get/set prefixes. Supposedly using parenthesis
with such declarations will be outlawed in the future, but I don't think
that's the case currently.
>> Jonas Drewsen Wrote:
>>
>>> //
>>> // Simple HTTP GET with sane defaults
>>> // provides the .content, .headers and .status
>>> //
>>> writeln( Http.get("http://www.google.com").content );
>>>
>>> //
>>> // GET with custom data receiver delegates
>>> //
>>> Http http = new Http("http://www.google.dk");
>>> http.setReceiveHeaderCallback( (string key, string value) {
>>> writeln(key ~ ":" ~ value);
>>> } );
>>> http.setReceiveCallback( (string data) { /* drop */ } );
>>> http.perform;
>>
>> http.onHeader = (string key, string value) {...};
>> http.onContent = (string data) { ... };
>> http.perform();
More information about the Digitalmars-d
mailing list