SwiftEngine
Please note: This project is still in Alpha Version and we’re actively working on forking over a lot of nifty features from SwiftEngine to make it compatible with SwiftNIO. We appreciate any contributors or testers joining our project!
Apple Swift based HTTP server. The answer for a Swift based, turn key, crash resilient, high scale, and production grade web server.
Getting Started :boom:
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
Prerequisites :exclamation:
What are the dependencies we need to get this to work?
OS | Version |
---|---|
macOS | 10.13+ |
Ubuntu | 14.04, 16.04, 16.10 |
Getting started with the project :thumbsup:
- Clone this repo:
git clone https://github.com/swiftengine/SwiftEngine.git
cd
toSwiftEngine
directory and runsudo ./install.sh
- Run
./run.sh
This should start the server running and listening on port8887
Using :star:
Programming your site:
- Create a new
mypage.swift
file within the/var/swiftengine/www/
directory (see example below) - From the browser, enter the following url
http://<machine_ip>:8887/mypage
(by default this islocalhost:8887
)
That's it! No compilation or dealing with shell dumps required! Your requested endpoints will be automagically compiled during the first request, and results will be shown.
Any swift file you place in /var/swiftengine/www
will be accessible through the browser without the .swift
extension.
Read more about SwiftEngine's autonomous system and routing logic (here)
Example of a SwiftEngine based .swift
file :trophy:
// Import SwiftEngine essentials
import SwiftEngine
// specify other required files for this file
//se: require /common.swift
// Entry Point function; where all code begins
func entryPoint(ctx: RequestContext) {
// add GET handlers to the request context
ctx.addHandler(forMethod:"GET", withRoute:"*"){
req, res in
res.write("Hello from SwiftEngine! ")
}
// add POST handlers to the request context
ctx.addHandler(forMethod:"POST", withRoute:"*"){
req, res in
res.write("Handle for POST request method")
}
// add catch-all handlers to the request context
ctx.addHandler(forMethod:"*", withRoute:"*"){
req, res in
res.write("Handle for catch-all")
}
}