swift server-side-let swift2016
TRANSCRIPT
![Page 1: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/1.jpg)
let swift(16)
Docker + Swift Server-Side
OSXDEV.orgByungwook�AhnOSXDEV.orgWonseok�Yang
1
![Page 2: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/2.jpg)
2
Experienced
Device driver(windows, linux) Media streaming CDN Docker
Letswift Conf. 2016 Speaker Tensorflow-KR 2016 Speaker PyCon Hongkong 2015 Speaker PyCon Korea 2015 Speaker
![Page 3: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/3.jpg)
3
![Page 4: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/4.jpg)
Agenda
WWDC 2016 - swift session
Server-Side?
Swift backend framework
VirtualBox, Kitura, Docker
myFirstProject
Demo
Summary
4
![Page 5: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/5.jpg)
WWDC 2016 - swift session Swift
What’s New in Swift : https://developer.apple.com/videos/play/wwdc2016/402/
Client-Side
What’s New in Foundation for Swift : https://developer.apple.com/videos/play/wwdc2016/207/
Getting Started with Swift : https://developer.apple.com/videos/play/wwdc2016/404/
Introducing Swift Playgrounds : https://developer.apple.com/videos/play/wwdc2016/408/
Swift API Design Guidelines : https://developer.apple.com/videos/play/wwdc2016/403/
Understanding Swift Performance : https://developer.apple.com/videos/play/wwdc2016/416/
Concurrent Programming With GCD in Swift 3 : https://developer.apple.com/videos/play/wwdc2016/720/
Using Store Kit for In-App Purchase wit Swift 3 : https://developer.apple.com/videos/play/wwdc2016/702/
Server-Side
Going Server-side with Swift Open Source : https://developer.apple.com/videos/play/wwdc2016/415/
Software Engineer
@red
5
![Page 6: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/6.jpg)
Server-Side? Backend Web Framework
Web Framework?
Ajax asynchronous Javascript and XML
MVC framework Model/View/Controller
i18n Internationalization ( ex:date … )
ORM Object Relational Mapping(RDB)
Testing framework Framework JUnit, Cedar…
Security Framework Spring Security(OAuth)
Template Framework Mustache
Caching Framework redis, Ehcache6
![Page 7: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/7.jpg)
Kitura Perfect
Hosted IBM perfect.org
latest version v0.20.0 v1.0.0
started date Feb 9, 2016 Oct 3, 2015
License Apache 2.0 Apache 2.0
MySQL O O
SQLite O O
Redis O O
HTTP URL routing O O
Parmeter Parsing O O
JSON O O
OAuth Kitura-Credentials -
Package/3rdParty Library Many ?
Swift backend framework
Most popular Swift backend framework : Zewo,Vapor…
![Page 8: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/8.jpg)
let swift(16)
VirtualBox, Kitura, Docker
https://github.com/bwahn/letswift2016-conference8
![Page 9: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/9.jpg)
VirtualBox(vagrantfile)# -*- mode: ruby -*-
# vi: set ft=ruby :
BOX_URL = 'https://cloud-images.ubuntu.com/vagrant/wily/current/wily-server-cloudimg-amd64-vagrant-disk1.box'.freeze
SWIFT_PATH = 'https://swift.org/builds/development/ubuntu1510/swift-DEVELOPMENT-SNAPSHOT-2016-06-06-a'.freeze
SWIFT_DIRECTORY = 'swift-DEVELOPMENT-SNAPSHOT-2016-06-06-a-ubuntu15.10'.freeze
SWIFT_FILE = "#{SWIFT_DIRECTORY}.tar.gz".freeze
SWIFT_HOME = "/home/vagrant/#{SWIFT_DIRECTORY}".freeze
LIBDISPATCH_URL = '-b experimental/foundation https://github.com/apple/swift-corelibs-libdispatch'.freeze
KITURA_URL = 'https://github.com/IBM-Swift/Kitura.git'.freeze
KITURA_BRANCH = 'master'.freeze
Vagrant.configure(2) do |config|
config.vm.box = BOX_URL
config.vm.network 'forwarded_port', guest: 8090, host: 8090
Swift 3.0
For Restful-APIs
9
KITURA master
![Page 10: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/10.jpg)
###
# 1. Install compiler, autotools
sudo apt-get --assume-yes install clang
sudo apt-get --assume-yes install autoconf libtool pkg-config
# 2. Install dtrace (to generate provider.h)
sudo apt-get --assume-yes install systemtap-sdt-dev
# 3. Install libdispatch pre-reqs
sudo apt-get --assume-yes install libblocksruntime-dev libkqueue-dev libpthread-workqueue-dev libbsd-dev
# 4. Kitura packages
sudo apt-get --assume-yes install libhttp-parser-dev libcurl4-openssl-dev libhiredis-dev
Install packages
10
![Page 11: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/11.jpg)
11
### Download and install Kitura
git clone #{KITURA_URL} -b #{KITURA_BRANCH}
cd Kitura
swift build -Xcc -fblocks
cd ..
$ vagrant up
![Page 12: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/12.jpg)
let swift(16)
myFirstProject
![Page 13: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/13.jpg)
13
$ vagrant ssh
vagrant@vagrant-ubuntu-wily-64: $ mkdir myFirstProject vagrant@vagrant-ubuntu-wily-64: $ cd myFirstProject vagrant@vagrant-ubuntu-wily-64: $ swift package init
![Page 14: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/14.jpg)
14
$ vi package.swift
import PackageDescription
let package = Package( name: "myFirstProject", dependencies: [ .Package(url: "https://github.com/IBM-Swift/Kitura.git", majorVersion: 0, minor: 20) ])
![Page 15: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/15.jpg)
15
$ vi Sources/main.swift import Kitura
let router = Router()
router.get("/") { request, response, next in response.send("Hello, World!") next() }
Kitura.addHTTPServer(onPort: 8090, with: router) Kitura.run()
$ swift build -Xcc -fblocks $ ./build/debug/myFirstProject
![Page 16: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/16.jpg)
let swift(16)
For Docker
![Page 17: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/17.jpg)
For Docker build
Run a letswift-api server
17
![Page 18: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/18.jpg)
18
Docker build
$ git clone https://github.com/bwahn/letswift2016-conference.git
$ docker build -t swift-api .
Docker run
$ docker run -d -p 8090:8090 --name api swift-api:latest
image(swift-api:latest)$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE swift-api latest 829e110bd520 3 hours ago 1.524 GB ibmcom/kitura-ubuntu latest 20cb1052cd2e 2 weeks ago 1.524 GB ibmcom/swift-ubuntu latest b4daffd2bbaf 2 weeks ago 1.233 GB
![Page 19: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/19.jpg)
Virtual Box VM - Ubuntu
$ docker run -d -p 8090 --name api1 swift-api:latest $ docker run -d -p 8090 --name api2 swift-api:latest $ docker run -d -p 8090 --name api3 swift-api:latest
… … ..
macOSport
8090:8090
? => scale up $ docker-compose
19
![Page 20: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/20.jpg)
let swift(16)
Demo : Introduction
![Page 21: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/21.jpg)
“I Hate Objective-C” Application
Client : Swift 2.2 ( Cocoa-touch)
Server : Swift 3 ( Kitura)
21
![Page 22: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/22.jpg)
Architecture
MySQLCloud End-Point
swift backend
swift backend
swift backend
Google Container cluster
Swift App
22
![Page 23: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/23.jpg)
Dev/Prod Environment
Virtual Box VM - Ubuntu (Swift - backend)
google container registry
Swift - Client
Google Cloud Platform
swift backend
swift backend
swift backend
MySQL
![Page 24: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/24.jpg)
24
================================== Description : get a number of vote Request: Verb: GET URL: http://letswift-api:8090/vote Response: HTTP code: 200 Body: { "objective-c": 100, "swift": 100 } ================================== Description : Increase a vote Request: Verb: PUT URL: http://letswift-api:8090/votes/objectivec_voted Request: Verb: PUT URL: http://letswift-api:8090/votes/swift_voted Response: HTTP code: 200
![Page 25: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/25.jpg)
let swift(16)
Let’s vote!
25
![Page 26: Swift server-side-let swift2016](https://reader035.vdocuments.us/reader035/viewer/2022062823/586f79721a28ab10258b6f85/html5/thumbnails/26.jpg)
26
let swift(16)