[swift-server-dev] HTTP API Sketch v2
Helge Heß
me at helgehess.eu
Sun Apr 9 06:50:39 CDT 2017
Hi,
On 9. Apr 2017, at 04:12, George Leontiev via swift-server-dev <swift-server-dev at swift.org> wrote:
> Earlier in this thread, I think someone dismissed protocols/generics because “at some point, we need to implement a concrete type”.
I don’t think anything was ‘dismissed’. The sole meaning was that there will be a Swift Server module and that this should/will come with a concrete type (so that people can have a minimal running http server out of the box by just using that module). You can still have protocols or whatever you chose.
> I think we can leverage the Swift type system to have something much better.
>
> I recommend having protocols for HTTP{Request,Response}{Encodable,Decoder} types
<snip> protocols <snip>
Your `HTTPRequestEncodable` is in a way the reverse of Johannes’ HTTPResponseWriter. The advantage of the latter is that it also doesn’t enforce a specific response type and neither requires a type at all. W/ your approach there always has to be a type implementing the protocol.
I’m not entirely sure why you would call it `HTTPRequestEncodable`. I would just call it `HTTPRequest`? To me an `Encodable` has a method which provides another value (the encoded representation). Like this:
protocol HTTPRequestEncodable {
func encodeAsHTTPRequest() -> HTTPRequest
}
which may still be useful. But extra indirections :-)
Your `HTTPRequestDecoder` is like a parser delegate, kinda like the peer to the `HTTPResponseWriter`. Could be done like this.
Though if you provide an “Encodable” I suppose the assumption would be that you also provide a “Decodable” too ...
> I can flesh out the APIs more if people are interested, but I think this is sufficient to communicate the idea, and I’d love to hear more feedback.
A complete proposal like Johannes’ would be more useful. Or maybe even better a revision of Johannes’ proposal with your ideas in it.
> There is a performance overhead to using protocols/generics, but I believe these can be effectively mediated by the compiler.
I don’t see how you would eliminate the protocol overhead cross-module. But I think it should be small enough (after all the proposal also uses Strings ;-).
hh
More information about the swift-server-dev
mailing list