<div dir="ltr">I updated my proposal according to Helge&#39;s suggestions. I really think we can settle the following APIs very quickly:<div><span style="font-size:12.800000190734863px"><br></span></div><div><span style="font-size:12.800000190734863px">Version</span><div style="font-size:12.800000190734863px">Headers</div><div style="font-size:12.800000190734863px">Message</div><div style="font-size:12.800000190734863px">Request</div><div style="font-size:12.800000190734863px">Request.Method</div><div style="font-size:12.800000190734863px">Response</div><div style="font-size:12.800000190734863px">Response.Status</div><div style="font-size:12.800000190734863px"><br></div><div style="font-size:12.800000190734863px">Apart from naming the properties are identical to what Carl proposed. Helge didn&#39;t comment anything about URI and Storage. I don&#39;t feel strongly about either one.</div><div><br></div><div><a href="https://github.com/paulofaria/http-api-proposal/blob/master/Sources/HTTP.swift">https://github.com/paulofaria/http-api-proposal/blob/master/Sources/HTTP.swift</a><br></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 26 May 2017 at 21:06, Paulo Faria <span dir="ltr">&lt;<a href="mailto:paulo@zewo.io" target="_blank">paulo@zewo.io</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><span style="font-size:12.800000190734863px"> &gt; I mean, having buffers don&#39;t make async APIs impossible. </span><br><div><span style="font-size:12.800000190734863px"><br></span></div></span><div><span style="font-size:12.800000190734863px">Having raw buffers instead of DispatchData.</span></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On 26 May 2017 at 21:05, Paulo Faria <span dir="ltr">&lt;<a href="mailto:paulo@zewo.io" target="_blank">paulo@zewo.io</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span>&gt; <span style="font-size:12.800000190734863px">In a synchronous setup you usually ‘receive’ (and send) directly into a buffer and may not even need to allocate it on the heap. In a asynchronous setup you have to allocate it on the heap, because -  well, the reference/buffer needs to stay until the receive is completed. Well, and, DispatchData is a heap object optimized for that. Though I don’t know why this isn’t integrated with Data.</span><div><span style="font-size:12.800000190734863px"><br></span></div></span><div><span style="font-size:12.800000190734863px">What I mean is.. Nothing is stopping one to hold the reference to the buffer, right? I mean, having buffers don&#39;t make async APIs impossible. </span></div></div><div class="m_-6408907552790258650HOEnZb"><div class="m_-6408907552790258650h5"><div class="gmail_extra"><br><div class="gmail_quote">On 26 May 2017 at 20:54, Helge Heß via swift-server-dev <span dir="ltr">&lt;<a href="mailto:swift-server-dev@swift.org" target="_blank">swift-server-dev@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span>On May 27, 2017, at 1:19 AM, Paulo Faria &lt;<a href="mailto:paulo@zewo.io" target="_blank">paulo@zewo.io</a>&gt; wrote:<br>
&gt; I&#39;m not sure I follow your example. Cat.Animal doesn&#39;t make much sense to me while Animal.Cat makes perfect sense.<br>
<br>
</span>Precisely. Name it after the concrete thing, not after the abstract concept.<br>
<span><br>
&gt; When importing HTTP you know you&#39;ll deal with HTTP requests and not anything else.<br>
<br>
</span>HTTP servers don’t exist in the void. Your endpoint is going to do something, e.g. some other form of request. In the case of HTTP application servers this is going to be quite often an: NSFetchRequest ... well, a CoreData.Query.Request in your API naming convention …<br>
<br>
But we can leave it at that. If people think that this is a good idea, go ahead. I recommend against it.<br>
<span><br>
&gt; most of the APIs are synchronous<br>
<br>
</span>If you say so. I notice exactly the reverse ;-) Most of the API in Node.js is async for sure and good reason.<br>
<span><br>
&gt; &gt; For async you usually need some way to hold on to a buffer, and that is DispatchData<br>
&gt;<br>
&gt; Sorry can you elucidate that? If you have the pointer, you&#39;re holding the buffer aren&#39;t you? I&#39;m not sure I follow the issue.<br>
<br>
</span>In a synchronous setup you usually ‘receive’ (and send) directly into a buffer and may not even need to allocate it on the heap. In a asynchronous setup you have to allocate it on the heap, because -  well, the reference/buffer needs to stay until the receive is completed. Well, and, DispatchData is a heap object optimized for that. Though I don’t know why this isn’t integrated with Data.<br>
<br>
hh<br>
<div class="m_-6408907552790258650m_8172265506621667770HOEnZb"><div class="m_-6408907552790258650m_8172265506621667770h5"><br>
<br>
&gt;<br>
&gt;<br>
&gt; On 26 May 2017 at 20:09, Helge Heß via swift-server-dev &lt;<a href="mailto:swift-server-dev@swift.org" target="_blank">swift-server-dev@swift.org</a>&gt; wrote:<br>
&gt; On May 27, 2017, at 12:55 AM, Paulo Faria &lt;<a href="mailto:paulo@zewo.io" target="_blank">paulo@zewo.io</a>&gt; wrote:<br>
&gt; &gt; Helge! I agree with most of your suggestions and I&#39;ll update my proposal with them. There&#39;s only one I&#39;m not with you and it&#39;s about the HTTP prefix. The example you mentioned could be easily solved by adding `HTTP.` when referring to the specific type.<br>
&gt; &gt;<br>
&gt; &gt; import HTTP<br>
&gt; &gt; import SOAP<br>
&gt; &gt;<br>
&gt; &gt; let request = HTTP.Request()<br>
&gt; &gt;<br>
&gt; &gt; We have used Request and Response without prefixes for about two years and not once anyone complained about that. I imagine others who use the same naming scheme can testify to that.<br>
&gt;<br>
&gt; Having seen such overloading in Java frameworks before I simply disagree with that. The object in question is plainly a HTTPRequest(Head) not just some arbitrary request. The ‘HTTP’ really is part of the thing. In fact the ‘arbitrary’ request could be an NSOperation, providing functionalities such as pause, cancel, etc.<br>
&gt;<br>
&gt; In a way it is like<br>
&gt;<br>
&gt;   import Cat<br>
&gt;<br>
&gt;   let pet = Animal() // resolving to Cat.Animal()<br>
&gt;<br>
&gt; But well, if people really like that … ;-) I vote against it.<br>
&gt;<br>
&gt; &gt; About Sync/Async prefix. I was talking about type prefixes not method prefixes. We definitely shouldn&#39;t prefix function APIs with sync or async. I honestly don&#39;t care too much about which one to use as a default. I just think it makes more sense to prefix the Async ones.<br>
&gt;<br>
&gt; Your particular setup is sync, right? ;-&gt;<br>
&gt;<br>
&gt; &gt; About raw buffers we could provide APIs that take an array of Unsafe[Mutable]RawBufferPointe<wbr>r to pass them to readv, writev and company. Those could also be easily converted to DispatchData in the frameworks that prefer to use it.<br>
&gt;<br>
&gt; This is a little related to sync vs async. For async you usually need some way to hold on to a buffer, and that is DispatchData. For sync you usually don’t have to, and pointers to buffers can be faster.<br>
&gt;<br>
&gt; Though I do think that sync is more appropriate for many server builders, I think that the goal for Swift-Server would be more oriented towards async. I may be wrong.<br>
&gt;<br>
&gt; hh<br>
&gt;<br>
&gt;<br>
&gt; ______________________________<wbr>_________________<br>
&gt; swift-server-dev mailing list<br>
&gt; <a href="mailto:swift-server-dev@swift.org" target="_blank">swift-server-dev@swift.org</a><br>
&gt; <a href="https://lists.swift.org/mailman/listinfo/swift-server-dev" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-server-dev</a><br>
&gt;<br>
&gt;<br>
<br>
</div></div><br>______________________________<wbr>_________________<br>
swift-server-dev mailing list<br>
<a href="mailto:swift-server-dev@swift.org" target="_blank">swift-server-dev@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-server-dev" rel="noreferrer" target="_blank">https://lists.swift.org/mailma<wbr>n/listinfo/swift-server-dev</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div>