Slide 1

Slide 1 text

Introducing APIKit

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

͜͏͍͏APIΫϥΠΞϯτΛ SwiftͰॻ͘ͷ͸΋͍ͬͨͳ͍

Slide 4

Slide 4 text

let path = "/search/repositories" let parameters = [ "q": "APIKit", "sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } }

Slide 5

Slide 5 text

let path = "/search/repositories" let parameters = [ "q": "APIKit", "sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } ✗ ΤϯυϙΠϯτ͕ଘࡏ͢Δ͔ෆ໌

Slide 6

Slide 6 text

let path = "/search/repositories" let parameters = [ "q": "APIKit", "sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } ✗ ύϥϝʔλʔʹ ԿͰ΋ಥͬࠐΊΔ

Slide 7

Slide 7 text

let path = "/search/repositories" let parameters = [ "q": "APIKit", "sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } ✗ ྆ํoptionalͳͷͰ4ύλʔϯ

Slide 8

Slide 8 text

let path = "/search/repositories" let parameters = [ "q": "APIKit", "sort": "stars", "order": "asc", ] GitHub.call(.GET, path, parameters) { JSON, error in if error != nil { println("error: \(error!.localizedDescription)”) } else { self.repositories = /* model object from JSON */ } } ✗ ྆ํoptionalͳͷͰ4ύλʔϯ JSON Error .None .None .None .Some .Some .None .Some .Some

Slide 9

Slide 9 text

“Swift is a type safe language.”

Slide 10

Slide 10 text

APIKit

Slide 11

Slide 11 text

“A networking library for building type safe web API client in Swift.”

Slide 12

Slide 12 text

“A networking library for building type safe web API client in Swift.”

Slide 13

Slide 13 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } }

Slide 14

Slide 14 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ΤϯυϙΠϯτ͕ิ׬͞ΕΔ

Slide 15

Slide 15 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ύϥϝʔλʔΛܕͰ੍ݶ

Slide 16

Slide 16 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ύϥϝʔλʔΛܕͰ੍ݶ ✓ enum΋࢖͑Δ

Slide 17

Slide 17 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ݁Ռ͸2ύλʔϯ

Slide 18

Slide 18 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ ݁Ռ͸2ύλʔϯ ✓ ໢ཏੑ΋໌Β͔

Slide 19

Slide 19 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ஋ΛऔΓग़ͤΔ

Slide 20

Slide 20 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ஋ΛऔΓग़ͤΔ ✓ ஋ͷܕ͸ϦΫΤετ͔Βਪ࿦͞ΕΔ

Slide 21

Slide 21 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ஋ΛऔΓग़ͤΔ ✓ ஋ͷܕ͸ϦΫΤετ͔Βਪ࿦͞ΕΔ [Repository]

Slide 22

Slide 22 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ஋ΛऔΓग़ͤΔ ✓ ஋ͷܕ͸ϦΫΤετ͔Βਪ࿦͞ΕΔ [Repository] ✓ ࣦഊ࣌͸NSError͕ೖΔ NSError

Slide 23

Slide 23 text

let request = GitHub.Endpoint.SearchRepositories(query: "APIKit", sort: .Stars, order: .Ascending) GitHub.sendRequest(request) { response in switch response { case .Success(let box): self.repositories = box.unbox case .Failure(let box): println("error: \(box.unbox.localizedDescription)") } } ✓ unwrapͤͣʹ ஋ΛऔΓग़ͤΔ ✓ ஋ͷܕ͸ϦΫΤετ͔Βਪ࿦͞ΕΔ [Repository] ✓ ࣦഊ࣌͸NSError͕ೖΔ NSError LlamaKit.Result

Slide 24

Slide 24 text

҆શͰ࢖͍΍͍͢

Slide 25

Slide 25 text

ϦΫΤετͷఆٛ

Slide 26

Slide 26 text

public protocol Request { typealias Response: Any var URLRequest: NSURLRequest? { get } func responseFromObject(object: AnyObject) -> Response? } Requestϓϩτίϧʹ ద߹͢Ε͹׬ྃ

Slide 27

Slide 27 text

public protocol Request { typealias Response: Any var URLRequest: NSURLRequest? { get } func responseFromObject(object: AnyObject) -> Response? } Requestϓϩτίϧʹ ద߹͢Ε͹׬ྃ ֤ΤϯυϙΠϯτͷఆٛ͸1ՕॴͰࡁΉ

Slide 28

Slide 28 text

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

class SearchRepositories: APIKit.Request { enum Sort: String { case Stars = "stars" case Forks = "forks" case Updated = "updated" } enum Order: String { case Ascending = "asc" case Descending = "desc" } typealias Response = [Repository] let query: String let sort: Sort let order: Order var URLRequest: NSURLRequest? { return GitHub.URLRequest(.GET, "/search/repositories", [ "q": query, "sort": sort.rawValue, "order": order.rawValue ]) } init(query: String, sort: Sort = .Stars, order: Order = .Ascending) { self.query = query self.sort = sort self.order = order } }

Slide 31

Slide 31 text

·ΔͰ υΩϡϝϯτΛ ͔ࣸͨ͠ͷΑ͏ͳ ఆٛ

Slide 32

Slide 32 text

ؾ͍͍࣋ͪ

Slide 33

Slide 33 text

https://github.com/ ishkawa/APIKit