<tt><font size=2>&gt; 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.</font></tt>
<br>
<br><font size=2 face="sans-serif">This was, and I believe still is, the
goal of the Server APIs Project - to provide core foundational capabilities,
initially scoped to networking, security and HTTP libraries.</font>
<br>
<br><font size=2 face="sans-serif">In some areas this means we have to
make hard decisions about what we believe is right for the Swift ecosystem
- which does require some guesswork about the future. Concurrency models
is one area that has come up a number of times, and is one of the reasons
we had a long period of open discussion before moving to looking at the
API surface.</font>
<br>
<br><font size=2 face="sans-serif">All the indications are that the ongoing
concurrency model for Swift will be async. The current implementation is
Dispatch based async, and a large amount of the existing Swift APIs rely
on this approach. That's not to say that Swift 5 couldn't bring a blocking
/ CSP style concurrency model - but if that happens there will need to
be a migration path for the existing async APIs, so the Server APIs Project
libraries won't be alone in that.</font>
<br>
<br><font size=2 face="sans-serif">Chris</font>
<br>
<br><tt><font size=2>swift-server-dev-bounces@swift.org wrote on 01/06/2017
21:41:24:<br>
<br>
&gt; From: Helge Heß via swift-server-dev &lt;swift-server-dev@swift.org&gt;</font></tt>
<br><tt><font size=2>&gt; To: Paulo Faria via swift-server-dev &lt;swift-server-dev@swift.org&gt;</font></tt>
<br><tt><font size=2>&gt; Date: 01/06/2017 21:48</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; Hi,<br>
&gt; <br>
&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; I have to admit that I tried to follow the discussion here,
but I<br>
&gt; got lost. I do not see what all this asynch/kevent/... stuff has to
<br>
&gt; do with an HTTP API.<br>
&gt; &gt;&gt; <br>
&gt; &gt;&gt; Its probably me though. It happens… :-(<br>
&gt; &gt; <br>
&gt; &gt; As one of the main offenders I can tell you that I don't quite
<br>
&gt; understand it either.<br>
&gt; <br>
&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; <br>
&gt; There are two main opinions:<br>
&gt; A) there should be a callback based API only (Johannes)<br>
&gt; B) there should be a synchronous API too &nbsp; &nbsp; (Paulo)<br>
&gt; <br>
&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; <br>
&gt; <br>
&gt; To resolve the situation one option would be to completely leave out<br>
&gt; the relevant parts and just have the parser, the request/response
<br>
&gt; objects. And other stuff working just on top of that (e.g. cookies
<br>
&gt; have been mentioned, auth decoding, utility stuff like that).<br>
&gt; Talking API.md:<br>
&gt; <br>
&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; <br>
&gt; Essentially remove: HTTPBodyHandler, HTTPBodyProcessing, HTTPBodyChunk.<br>
&gt; They could still be used in a Dispatch based default implementation,<br>
&gt; but wouldn’t be ‘standard API’. But add: HTTPParser.<br>
&gt; <br>
&gt; <br>
&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; 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; This IMO definitely implies that an I/O model and all that is chosen<br>
&gt; for the user.<br>
&gt; <br>
&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; <br>
&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; <br>
&gt; hh<br>
&gt; <br>
&gt; P.S.: Some of my personal opinions, just to give some context, no
<br>
&gt; need to discuss them at all:<br>
&gt; - It would be great if Swift would have a HttpServer lib which you<br>
&gt; &nbsp; can just use<br>
&gt; - If such exists it would be only confusing to provide two different<br>
&gt; &nbsp; APIs (in fact the other approaches may just die adoption wise
as<br>
&gt; &nbsp; the standard, well, sets the standard :-)<br>
&gt; - In general I’m mostly in favour of using async for the standard<br>
&gt; &nbsp; module (despite what follows)<br>
&gt; - I think that async APIs are overrated. They are a must on very <br>
&gt; &nbsp; highly scalable systems of certain kinds, but for many many
types<br>
&gt; &nbsp; of deployments they are just not necessary.<br>
&gt; - For most people programming against async APIs is a<br>
&gt; &nbsp; pain in the **, particularly w/ ARC. It just raises the complexity
a<br>
&gt; &nbsp; lot. (which people then try to solve w/ more additional magic
like<br>
&gt; &nbsp; Promises)<br>
&gt; - Node.js changed that a little, but the far majority of web<br>
&gt; &nbsp; development is still done in traditional synchronous/threaded<br>
&gt; &nbsp; setups: WebObjects, PHP, Servlets, Rails. IMO for a good reason,
<br>
&gt; &nbsp; see above.<br>
&gt; - If you use an async API and people end up doing `concat`, which<br>
&gt; &nbsp; is really common in Node .., you gained, well, nothing.<br>
&gt; <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>