Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Beyond Mobile

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Beyond Mobile

Avatar for Ian Partridge

Ian Partridge

January 27, 2017
Tweet

More Decks by Ian Partridge

Other Decks in Programming

Transcript

  1. Kitura 6 http://github.com/IBM-Swift/Kitura • Open source web framework for Swift

    on macOS and Linux • Inspired by Express for Node.js • Flexible routing • Pluggable middlewares • Easy to deploy • Supports FastCGI, TLS, WebSockets
  2. Kitura Simplicity 7 import Kitura let router = Router() router.get("/hello")

    { request, response, next in response.status(.OK).send("<h1>Hello, World!</h1>").end() } Kitura.addHTTPServer(onPort: 80, with: router) Kitura.run()
  3. Swift on Linux 8 Apple Client Deployment Server/Cloud Deployment Application-Specific

    Cloud Services Client Facing App Foundation Swift Swift Standard Library Core Foundation Dispatch PWQ C libs GLibc Foundation Swift Swift Standard Library Core Foundation Dispatch Darwin C libs Client-specific Libraries App Libraries Server-specific Libraries App Libraries Driving Towards Consistent Runtime across Clients/Servers Server-side Environments (Built with Foundation & Libdispatch)
  4. Swift’s Characteristics § Compiled language – No JIT compiler §

    ARC for memory management – No tracing GC § Modern syntax design – Enhanced programmer productivity 9
  5. Enabling rapid prototyping § Rapid time to value is key

    for server-side Swift § Take inspiration from Ruby on Rails § Enable scaffolding via code generation – Build on Yeoman 18
  6. Scaffolding to Hello World $ npm install -g yo $

    npm install –g git+https://github.com/IBM-Swift/generator-swiftserver $ yo swiftserver ? What's the name of your application? testapp ? Enter the name of the directory to contain the project: testapp ? Select the data store memory (for development purposes) create config.json create Package.swift create Sources/testapp/main.swift create Sources/Generated/ApplicationConfiguration.swift create manifest.yml create definitions/testapp.yaml Apple Swift version 3.0.2 (swiftlang-800.0.63 clang-800.0.42.1) Compile Swift Module 'GeneratedSwiftServer' (10 sources) Compile Swift Module 'GeneratedSwiftServer_CloudantStore' (1 sources) Compile Swift Module 'Generated' (1 sources) Compile Swift Module 'testapp' (1 sources) swift build command completed Next steps: Run the app $ .build/debug/testapp 19
  7. Defining Models $ yo swiftserver:model ? Enter the model name:

    book ? Custom plural form (used to build REST URL): books Let's add some book properties now. Enter an empty property name when done. ? Enter the property name: title ? Property type: string ? Required? Yes ? Default? No ? Enter the property name: author ? Property type: string ? Required? Yes ? Default? No ? Enter the property name: create models/book.json create Sources/Generated/Book.swift Compile Swift Module 'Generated' (2 sources) Compile Swift Module 'testapp' (1 sources) swift build command completed 20
  8. Defining Models $ ./.build/debug/testapp VERBOSE: init(mergeParameters:) Router.swift line 62 -

    Router initialized INFO: init(projectRoot:) Application.swift line 87 - Defining routes for book INFO: init(projectRoot:) Application.swift line 89 - Defining DELETE /api/books INFO: init(projectRoot:) Application.swift line 108 - Defining GET /api/books INFO: init(projectRoot:) Application.swift line 122 - Defining GET /api/books/:id INFO: init(projectRoot:) Application.swift line 158 - Defining POST /api/books INFO: init(projectRoot:) Application.swift line 203 - Defining PUT /api/books/:id INFO: init(projectRoot:) Application.swift line 264 - Defining PATCH /api/books/:id INFO: init(projectRoot:) Application.swift line 324 - Defining DELETE /api/books/:id VERBOSE: run() Kitura.swift line 71 - Starting Kitura framework... VERBOSE: run() Kitura.swift line 73 - Starting an HTTP Server on port 80... INFO: listen(on:) HTTPServer.swift line 72 - Listening on port 80 21
  9. Swift on Linux – Batteries not included § Building Kitura

    was harder than it should have been § Core infrastructure missing – Sockets – Security § Unsafe code required to interface with C libraries § Noone else should share our pain… 24
  10. Swift.org Server APIs workgroup § Official swift.org project § Working

    to create reference APIs for low-level server functionality – Adhering to Swift API design guidelines § Focus areas – Networking – Security – Web protocols 25
  11. Future Directions for Swift § Reflection / dynamism – Currently

    lacking – Building a full ORM is hard § Concurrency – Coming in Swift 5? – Actor model? § Error handling – Force unwrap is game over – Servers need more flexibility 27