<tt><font size=2>&gt; Personally I would favour a solution in which the
user code is not <br>
&gt; activated until the request header is complete. Then the user code
<br>
&gt; can decide (with the request header provided) if it needs the entire<br>
&gt; body at once, or if it wants to process the body in chunks. — in
<br>
&gt; fact, I think I will improve Swiftfire to do just that ;-)</font></tt>
<br>
<br><font size=2 face="sans-serif">Isn't that possible in framework built
on top of the HTTP proposal? The framework can decide whether to read the
full request, including body and trailers, and convert that into a fully
formed request before carrying out routing and passing it on to application
code, or whether to pass headers plus stream.</font>
<br>
<br><font size=2 face="sans-serif">Chris<br>
</font>
<br>
<br><tt><font size=2>swift-server-dev-bounces@swift.org wrote on 02/06/2017
08:03:43:<br>
<br>
&gt; From: Rien via swift-server-dev &lt;swift-server-dev@swift.org&gt;</font></tt>
<br><tt><font size=2>&gt; To: Helge Heß &lt;me@helgehess.eu&gt;</font></tt>
<br><tt><font size=2>&gt; Cc: Paulo Faria via swift-server-dev &lt;swift-server-dev@swift.org&gt;</font></tt>
<br><tt><font size=2>&gt; Date: 02/06/2017 08:03</font></tt>
<br><tt><font size=2>&gt; Subject: Re: [swift-server-dev] Prototype of
the discussed HTTP API Spec</font></tt>
<br><tt><font size=2>&gt; Sent by: swift-server-dev-bounces@swift.org</font></tt>
<br><tt><font size=2>&gt; <br>
&gt; Ah, I think I am starting to understand now.<br>
&gt; Basically the problem is: What to do with A) Very large HTTP bodies,<br>
&gt; and B) In exotic applications that need extreme scalability<br>
&gt; While I think that A is something that must be considered, I think
<br>
&gt; that B is something that is probably more easily solved by a <br>
&gt; specific targeted API. Or maybe even no API, after all, I would <br>
&gt; expect these kind of applications to have additional considerations
<br>
&gt; that make it almost impossible to use a &nbsp;general purpose (GP)
API - <br>
&gt; at least it would make such a GP API incomprehensible for mortal <br>
&gt; developers. And let’s be honest, if we have to develop such an <br>
&gt; exotic beast then the additional effort to create a custom API <br>
&gt; building on Posix is probably lost in the fringes anyhow.<br>
&gt; <br>
&gt; But it is right to make that decision early on.<br>
&gt; <br>
&gt; Why not make two proposals and see which one receives the most support?<br>
&gt; <br>
&gt; Personally I would favour a solution in which the user code is not
<br>
&gt; activated until the request header is complete. Then the user code
<br>
&gt; can decide (with the request header provided) if it needs the entire<br>
&gt; body at once, or if it wants to process the body in chunks. — in
<br>
&gt; fact, I think I will improve Swiftfire to do just that ;-)<br>
&gt; <br>
&gt; Regards,<br>
&gt; Rien<br>
&gt; <br>
&gt; Site: </font></tt><a href=http://balancingrock.nl/><tt><font size=2>http://balancingrock.nl</font></tt></a><tt><font size=2><br>
&gt; Blog: </font></tt><a href=http://swiftrien.blogspot.com/><tt><font size=2>http://swiftrien.blogspot.com</font></tt></a><tt><font size=2><br>
&gt; Github: </font></tt><a href=http://github.com/Balancingrock><tt><font size=2>http://github.com/Balancingrock</font></tt></a><tt><font size=2><br>
&gt; Project: </font></tt><a href=http://swiftfire.nl/><tt><font size=2>http://swiftfire.nl</font></tt></a><tt><font size=2>
- A server for websites build in Swift<br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; <br>
&gt; &gt; On 01 Jun 2017, at 22:41, Helge Heß via swift-server-dev &lt;swift-<br>
&gt; server-dev@swift.org&gt; wrote:<br>
&gt; &gt; <br>
&gt; &gt; Hi,<br>
&gt; &gt; <br>
&gt; &gt;&gt; On 1. Jun 2017, at 21:07, Johannes Weiss via swift-server-dev
<br>
&gt; &lt;swift-server-dev@swift.org&gt; wrote:<br>
&gt; &gt;&gt;&gt; I have to admit that I tried to follow the discussion
here, but <br>
&gt; I got lost. I do not see what all this asynch/kevent/... stuff has
<br>
&gt; to do with an HTTP API.<br>
&gt; &gt;&gt;&gt; <br>
&gt; &gt;&gt;&gt; Its probably me though. It happens… :-(<br>
&gt; &gt;&gt; <br>
&gt; &gt;&gt; As one of the main offenders I can tell you that I don't
quite <br>
&gt; understand it either.<br>
&gt; &gt; <br>
&gt; &gt; yes, the discussion drifted off and is a little lost in arguments.<br>
&gt; But I don’t think it is actually hard to understand at all.<br>
&gt; &gt; <br>
&gt; &gt; There are two main opinions:<br>
&gt; &gt; A) there should be a callback based API only (Johannes)<br>
&gt; &gt; B) there should be a synchronous API too &nbsp; &nbsp; (Paulo)<br>
&gt; &gt; <br>
&gt; &gt; If this effort goes with just A, I think it is kinda obvious
that <br>
&gt; this won’t work for frameworks with a synchronous API. Not because
<br>
&gt; it isn’t possible to implement it at all (I showed that it is w/
the<br>
&gt; Apache one), but because it isn’t possible to implement in a way
<br>
&gt; which aligns with the higher level synchronous APIs of the <br>
&gt; frameworks (which are not callback based and don’t want to be callback
based).<br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt; To resolve the situation one option would be to completely leave
<br>
&gt; out the relevant parts and just have the parser, the request/<br>
&gt; response objects. And other stuff working just on top of that (e.g.
<br>
&gt; cookies have been mentioned, auth decoding, utility stuff like that).<br>
&gt; &gt; Talking API.md:<br>
&gt; &gt; <br>
&gt; &gt; &nbsp;</font></tt><a href=https://github.com/modswift/http/blob/develop/API.md><tt><font size=2>https://github.com/modswift/http/blob/develop/API.md</font></tt></a><tt><font size=2><br>
&gt; &gt; <br>
&gt; &gt; Essentially remove: HTTPBodyHandler, HTTPBodyProcessing, HTTPBodyChunk.<br>
&gt; &gt; They could still be used in a Dispatch based default <br>
&gt; implementation, but wouldn’t be ‘standard API’. But add: HTTPParser.<br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt; I think the *goal* of this group is a little mixed up or maybe
<br>
&gt; unclear. My assumption was always that this provides a standard <br>
&gt; server implementation which higher level frameworks can build upon.
<br>
&gt; It wouldn’t do middleware, Zope or WebObjects style processing, but
<br>
&gt; it would definitely do all the HTTP server stuff. SSL, HTTP/2, <br>
&gt; eventloop etc. What `httplib` does in Python or `http` in Go. The
<br>
&gt; user can just import the Swift module and off he goes. It's the <br>
&gt; standard Swift way to do HTTP servers and it is built in.<br>
&gt; &gt; If he then wants fancy HTML templates, an integrated ORM and
stuff<br>
&gt; like that, he’d use a framework build on top of that basic lib.<br>
&gt; &gt; This IMO definitely implies that an I/O model and all that is
<br>
&gt; chosen for the user.<br>
&gt; &gt; <br>
&gt; &gt; On the other side people like Paulo (I think ;-) see the API
more <br>
&gt; like just that, a common AP*Interface*. Only the common API is <br>
&gt; shared, everyone still has his own ’server' and eventually code on
<br>
&gt; top of that is shared. Kinda the other way around.<br>
&gt; &gt; <br>
&gt; &gt; So maybe the common goal should be clarified (or found) one more
<br>
&gt; time. Or maybe I’m just completely wrong :-)<br>
&gt; &gt; <br>
&gt; &gt; hh<br>
&gt; &gt; <br>
&gt; &gt; P.S.: Some of my personal opinions, just to give some context,
no <br>
&gt; need to discuss them at all:<br>
&gt; &gt; - It would be great if Swift would have a HttpServer lib which
you<br>
&gt; &gt; &nbsp;can just use<br>
&gt; &gt; - If such exists it would be only confusing to provide two different<br>
&gt; &gt; &nbsp;APIs (in fact the other approaches may just die adoption
wise as<br>
&gt; &gt; &nbsp;the standard, well, sets the standard :-)<br>
&gt; &gt; - In general I’m mostly in favour of using async for the standard<br>
&gt; &gt; &nbsp;module (despite what follows)<br>
&gt; &gt; - I think that async APIs are overrated. They are a must on very
<br>
&gt; &gt; &nbsp;highly scalable systems of certain kinds, but for many
many types<br>
&gt; &gt; &nbsp;of deployments they are just not necessary.<br>
&gt; &gt; - For most people programming against async APIs is a<br>
&gt; &gt; &nbsp;pain in the **, particularly w/ ARC. It just raises the
complexity a<br>
&gt; &gt; &nbsp;lot. (which people then try to solve w/ more additional
magic like<br>
&gt; &gt; &nbsp;Promises)<br>
&gt; &gt; - Node.js changed that a little, but the far majority of web<br>
&gt; &gt; &nbsp;development is still done in traditional synchronous/threaded<br>
&gt; &gt; &nbsp;setups: WebObjects, PHP, Servlets, Rails. IMO for a good
reason, <br>
&gt; &gt; &nbsp;see above.<br>
&gt; &gt; - If you use an async API and people end up doing `concat`, which<br>
&gt; &gt; &nbsp;is really common in Node .., you gained, well, nothing.<br>
&gt; &gt; <br>
&gt; &gt; <br>
&gt; &gt; _______________________________________________<br>
&gt; &gt; swift-server-dev mailing list<br>
&gt; &gt; swift-server-dev@swift.org<br>
&gt; &gt; </font></tt><a href="https://lists.swift.org/mailman/listinfo/swift-server-dev"><tt><font size=2>https://lists.swift.org/mailman/listinfo/swift-server-dev</font></tt></a><tt><font size=2><br>
&gt; <br>
&gt; _______________________________________________<br>
&gt; swift-server-dev mailing list<br>
&gt; swift-server-dev@swift.org<br>
&gt; </font></tt><a href="https://lists.swift.org/mailman/listinfo/swift-server-dev"><tt><font size=2>https://lists.swift.org/mailman/listinfo/swift-server-dev</font></tt></a><tt><font size=2><br>
</font></tt><font size=2 face="sans-serif"><br>
Unless stated otherwise above:<br>
IBM United Kingdom Limited - Registered in England and Wales with number
741598. <br>
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6
3AU<br>
</font>