Swiftpack.co -  mtgto/Swiftra as Swift Package
Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
mtgto/Swiftra
A tiny Sinatra-like web framework for Swift. Based on SwiftNIO.
.package(url: "https://github.com/mtgto/Swiftra.git", from: "0.5.0")

Swiftra

Cocoapods Platforms build status

A tiny Sinatra-like web framework for Swift.

Swiftra is a small wrapper on SwiftNIO.

Example

import Swiftra

struct ExampleError: Error {}

let app = App {
    get("/") { req in
        .text("Hello, world!")
    }

    get("/html") { req in
        .text("<html><body>Hello from Swiftra</body></html>", contentType: ContentType.textHtml.withCharset())
    }

    // path parameters
    get("/hello/:name") { req in
        .text("Hello \(req.params("name", default: "guest"))")
    }

    // convert Encodable value into JSON
    get("/json") { req in
        Response(json: ["Hello": "World!"])!
    }

    // asynchronous
    futureGet("/future") { req in
        let promise = req.makePromise(of: String.self)
        _ = req.eventLoop.scheduleTask(in: .seconds(1)) {
            promise.succeed("Hello from future")
        }
        return promise.futureResult.map { .text($0) }
    }

    // No route matches
    notFound { req in
        .text("Not Found", status: .notFound)
    }

    // Example of error handling. See also below `error`
    get("/error") { req in
        throw ExampleError()
    }

    // unhandled error handler
    error { req, error in
        .text("Error", status: .internalServerError)
    }
}

// You can add routes
app.addRoutes {
    get("/addRoute") { req in
        .text("New route is added")
    }
}

// Set default response headers
app.defaultHeaders = [("Server", "SwiftraExample/1.0.0")]

try! app.start(1337)
// You can customize bind address
// try! app.start(1337, host: "localhost")

Installation

Swift Package Manager (SPM)

Add https://github.com/mtgto/Swiftra to your dependencies of Swift Package.

Cocoapods

Add pod 'Swiftra', '~> 0.3' to your Podfile.

Features

  • Routing
  • Access path parameter(s)
  • Access query paramter(s)

Roadmap to v1.0.0

  • ☐ Helper to access components of request header
    • ☑ query string
    • ☐ fragment
    • ☐ Cookie
  • ☐ Helper to access request body
    • ☐ x-www-form-urlencoded data
    • ☐ JSON request
  • ☐ HTTP methods except for GET
  • ☑ Error handling
  • ☐ File upload
    • ☐ Large file upload
  • ☐ More performance

Contributing

Format swift code with swift-format before send your contribution.

$ swift-format --configuration .swift-format --in-place YourAwesomeCode.swift

pre-commit is recommended.

$ brew install pre-commit
$ pre-commit install

Acknowledgements

Thanks a lot A µTutorial on SwiftNIO 2.

License

Apache License 2.0.

See LICENSE.txt.

Author

@mtgto

GitHub

link
Stars: 0
Last commit: 2 weeks ago

Ad: Job Offers

iOS Software Engineer @ Perry Street Software
Perry Street Software is Jack’d and SCRUFF. We are two of the world’s largest gay, bi, trans and queer social dating apps on iOS and Android. Our brands reach more than 20 million members worldwide so members can connect, meet and express themselves on a platform that prioritizes privacy and security. We invest heavily into SwiftUI and using Swift Packages to modularize the codebase.

Dependencies

Release Notes

0.5.0
2 weeks ago

Changed

  • Support Swift 5.4 (@resultHandler)
  • Refactor App source code
  • Update SwiftNIO to 2.28.0

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API