[swift-server-dev] Convert HTTPVersion to struct
Chris Bailey
BAILEYC at uk.ibm.com
Wed Jun 14 11:09:17 CDT 2017
Based on where we are at the moment - which is dealing with HTTPVersion as
a separate type - it sounds like we're converging on using a struct. As
such if there's no strong objection I'll merge the PR as-is.
That doesn't close down the conversation with respect to what we
could/should do for HTTP/2 - just spins it off separately.
Chris
swift-server-dev-bounces at swift.org wrote on 14/06/2017 14:41:48:
> From: Michael Chiu via swift-server-dev <swift-server-dev at swift.org>
> To: Tanner Nelson <tanner at vapor.codes>
> Cc: Paulo Faria via swift-server-dev <swift-server-dev at swift.org>
> Date: 14/06/2017 15:19
> Subject: Re: [swift-server-dev] Convert HTTPVersion to struct
> Sent by: swift-server-dev-bounces at swift.org
>
> So are we going to write our own http parser?
>
> If not, I don’t see the benefit of ditching version and method
> properties since both major/minor version and method are given by
> the http_parser, and users are expecting to find it in the property
> since these components are well defined in RFC and guaranteed its
> existence in a proper http req/res. Hence they deserve to be an
> independent property.
>
> On the other hand, there’s no one guarantee the existence of
> Content-Type and Content-Length etc header exists in HTTP protocol
> (I can be wrong).
>
> Michael.
>
> On Jun 14, 2017, at 6:27 AM, Tanner Nelson via swift-server-dev <
> swift-server-dev at swift.org> wrote:
>
>
> On Wed, Jun 14, 2017 at 2:11 PM Helge Heß via swift-server-dev <
> swift-server-dev at swift.org> wrote:
> On 14 Jun 2017, at 14:59, Paulo Faria <paulo at zewo.io> wrote:
> > You're completely right we should care about HTTP 2.0 now. But
> let's do it one step at a time, or else we won't get things done.
> The current topic is the HTTPVersion type. So could you please give
> your feedback in the HTTPVersion thread about how the current
> proposal of HTTPversion fits with HTTP 2.0? We should go from lower
> abstractions to higher abstractions incrementally but definitely
> considering the upper abstractions. Let's keep focus and move on! 😊
>
> I gave my feedback on the type in the this thread already. Struct is
> fine for me, tuple is OK too. I don’t actually care much as “The
> HTTP version should only matter for logging purposes”. If it comes
> with comparison operations and such, something is likely wrong with the
API.
>
>
> The only HTTP/2 specific note I have is this thing:
>
> From the HTTPRequest API design perspective there is a small
> change in that method/version are just headers in HTTP/2.
> I brought that up before.
> E.g. why does ‘method' deserve a special enum, but not
> content-type etc which is equally important for dispatching
> a request. Either approach is fine though.)
>
> In that case, maybe we ditch the version and method properties in
> favor of something more generic like:
>
> (just spitballing some pseudo swift here)
> ```swift
>
> struct Request {
> ...
> enum Metadata {
> case original(major: Int, minor: Int, Method)
> case headers
> }
>
> var metadata: Metadata
> ...
> }
>
> extension Request {
> var method: Method {
> switch metadata {
> case .original(_, _, let method):
> return method
> case .headers:
> return Method(rawValue: headers["Method"])
> }
> }
> }
>
> ```
> Here an enum's ability to exhaustively switch would be useful. Then
> `req.method` is implemented as an extension similar to how
> `req.version` and `req.contentType` could be implemented.
>
>
> This affects the discussion as it may make sense to expose the
> HTTPVersion as a regular header to mirror the new HTTP/2 setup
> instead of basing the API on the old HTTP/0,1 model.
> (I think either is fine, with a slight preference for going
> with the ‘future’)
>
> Or in other words: Why struct or tuple, just keep it as a string
> like the other headers.
>
> If HTTPVersion is not exposed as a String but as a specific type,
> that would then affect the way headers in general are handled
> (and I’m very much in favour of NOT using strings for the common
> ones for various reasons).
>
> hh
>
> _______________________________________________
> swift-server-dev mailing list
> swift-server-dev at swift.org
> https://lists.swift.org/mailman/listinfo/swift-server-dev
> _______________________________________________
> swift-server-dev mailing list
> swift-server-dev at swift.org
> https://lists.swift.org/mailman/listinfo/swift-server-dev
> _______________________________________________
> swift-server-dev mailing list
> swift-server-dev at swift.org
> https://lists.swift.org/mailman/listinfo/swift-server-dev
Unless stated otherwise above:
IBM United Kingdom Limited - Registered in England and Wales with number
741598.
Registered office: PO Box 41, North Harbour, Portsmouth, Hampshire PO6 3AU
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-server-dev/attachments/20170614/965e2b08/attachment.html>
More information about the swift-server-dev
mailing list