ΞϓϦέʔγϣϯͷ࡞
vapor new [--template]
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 12
Slide 13
Slide 13 text
//APIͷςϯϓϨʔτͰ࡞(DBϞδϡʔϧͷFluent;͘Ή)
vapor new --template=api
//WebςϯϓϨʔτͰ࡞(ViewϞδϡʔϧͷLeafΛ;͘Ή)
vapor new --template=web
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 13
Slide 14
Slide 14 text
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 14
Slide 15
Slide 15 text
Ϗϧυ&ϥϯ
$ vapor new sampleWeb --template=web
$ cd sampleWeb/
$ vapor build
$ vapor run
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 15
Slide 16
Slide 16 text
http://0.0.0.0:8080/
ͰWebαʔόʔ্ཱ͕͕ͪΔ
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 16
Slide 17
Slide 17 text
XcodeͰ։ൃ͍ͨ͠ʁ
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 17
Slide 18
Slide 18 text
Ͱ͖·͢ʂ!
$ vapor xcode
Generating Xcode Project [Done]
Select the `Run` scheme to run.
Open Xcode project?
y/n> y
Opening Xcode project...
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 18
Slide 19
Slide 19 text
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 19
Slide 20
Slide 20 text
؆୯ʹσϓϩΠ͍ͨ͠ʁ
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 20
Slide 21
Slide 21 text
HerokuͰσϓϩΠʂ
gitͰίϛοτͯ͠vapor heroku
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 21
$ vapor heroku init
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 23
Slide 24
Slide 24 text
৭ʑฉ͔ΕΔͷͰ͑Δ
Would you like to provide a custom Heroku app name?
y/n> y
Custom app name:
> sample-vapor-web
Would you like to deploy to other than US region server?
y/n> y
Region code (us/eu):
> us
https://sample-vapor-web.herokuapp.com/ | https://git.heroku.com/sample-vapor-web.git
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 24
Slide 25
Slide 25 text
ͲΜͲΜ͑Δ
Would you like to provide a custom Heroku buildpack?
y/n> n
Setting buildpack...
Are you using a custom Executable name?
y/n> n
Setting procfile...
Committing procfile...
Would you like to push to Heroku now?
y/n> y
This may take a while...
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 25
Slide 26
Slide 26 text
VaporͷػೳҰཡ
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 26
Slide 27
Slide 27 text
ϧʔςΟϯά GETϝιου
GET /welcome
drop.get("welcome") { request in
return "Hello"
}
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 27
Slide 28
Slide 28 text
Ϩεϙϯε
http://0.0.0.0:8080/welcome
-> Hello
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 28
Slide 29
Slide 29 text
ϧʔςΟϯά POSTϝιου
POST /form
drop.post("form") { request in
return "Submitted with a POST request"
}
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 29
Slide 30
Slide 30 text
Ϩεϙϯε
POST http://0.0.0.0:8080/form
-> Submitted with a POST request
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 30
Slide 31
Slide 31 text
ύϥϝʔλʔ
GET /users/:id
drop.get("users", ":id") { request in
guard let userId = request.parameters["id"]?.int else {
throw Abort.badRequest
}
return "You requested User #\(userId)"
}
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 31
Slide 32
Slide 32 text
Ϩεϙϯε
GET http://0.0.0.0:8080/users/12
-> You requested User #12
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 32
Slide 33
Slide 33 text
ΫΤϦʔ
GET /users?name="xxx"
drop.get("users") { request in
guard let name = request.query?["name"]?.string else {
throw Abort.badRequest
}
return "You requested User #\(name)"
}
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 33
Slide 34
Slide 34 text
Ϩεϙϯε
GET http://0.0.0.0:8080/users?name=sato
-> You requested User #sato
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 34
Slide 35
Slide 35 text
JSON
GET /json
drop.get("json") { req in
var json = JSON()
try json.set("id", id)
try json.set("name", name)
try json.set("age", age)
return json
}
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 35
Slide 36
Slide 36 text
Ϩεϙϯε
GET http://0.0.0.0:8080/json
->
{"id":1,"name":"tommy","age":10}
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 36
Slide 37
Slide 37 text
σϞ
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 37
Slide 38
Slide 38 text
·ͱΊ
• Server Side Swift Vapor
• Vapor ToolsͰϏϧυ&HerokuʹσϓϩΠ
• ؆ܿͳϝιουͰ։ൃ͍͢͠
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 38
Slide 39
Slide 39 text
iOSDCͰൃද͠·͢
8/17 16:50ʙϥΠτχϯάτʔΫ
https://iosdc.jp/2017/
Swift αʔόʔαΠυ Vaporͷ࢝Ίํ 2017/8/29 39