Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introducing APIKit
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yosuke Ishikawa
March 12, 2015
Technology
6.1k
12
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introducing APIKit
Yosuke Ishikawa
March 12, 2015
More Decks by Yosuke Ishikawa
See All by Yosuke Ishikawa
効率的な開発手段として VRTを活用する
ishkawa
1
250
アプリを起動せずにアプリを開発して品質と生産性を上げる
ishkawa
0
4.6k
Achieving Testability in Presentation Layer
ishkawa
4
3.9k
Introducing Wire: Dependency Injection by Code Generator
ishkawa
12
1.4k
Declarative UICollectionView
ishkawa
28
8.5k
Nuxt.jsが掲げる"Universal Vue.js Applications"とは何者か
ishkawa
10
2.8k
Static Dependency Injection by Code Generation
ishkawa
15
6.8k
実践クライアントサイドSwift
ishkawa
23
4.4k
JSON-RPC on APIKit
ishkawa
5
69k
Other Decks in Technology
See All in Technology
クラウドファンディング版StackChan 3体(4体)をインタラクティブな体験型作品にして展示もした話 / スタックチャンお誕生日会2026
you
PRO
0
190
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
7
4k
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
320
toB プロダクトから見たWAF
tokai235
0
200
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
190
AI Agentをシステムに組み込む前にゆるく向き合ってみる
hayama17
0
160
GitHub Copilot app最速の発信の裏側
tomokusaba
1
270
FPC(フレキシブル)基板にZephyr実装してみた。
iotengineer22
0
170
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
900
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
180
AIが自律的に回る開発ループを設計してチーム開発に組み込む
nekorush14
0
130
千葉での単身赴任からAWSをやり続け、千葉に戻ってきた話
yama3133
1
120
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.2k
Mind Mapping
helmedeiros
PRO
1
260
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.9k
Building AI with AI
inesmontani
PRO
1
1.1k
Are puppies a ranking factor?
jonoalderson
1
3.6k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
How to Ace a Technical Interview
jacobian
281
24k
Embracing the Ebb and Flow
colly
88
5.1k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
260
Transcript
Introducing APIKit
None
͜͏͍͏APIΫϥΠΞϯτΛ SwiftͰॻ͘ͷ͍ͬͨͳ͍
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 */ } }
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 */ } } ✗ ΤϯυϙΠϯτ͕ଘࡏ͢Δ͔ෆ໌
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 */ } } ✗ ύϥϝʔλʔʹ ԿͰಥͬࠐΊΔ
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ύλʔϯ
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
“Swift is a type safe language.”
APIKit
“A networking library for building type safe web API client
in Swift.”
“A networking library for building type safe web API client
in Swift.”
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)") } }
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)") } } ✓ ΤϯυϙΠϯτ͕ิ͞ΕΔ
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)") } } ✓ ύϥϝʔλʔΛܕͰ੍ݶ
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͑Δ
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ύλʔϯ
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ύλʔϯ ✓ ཏੑ໌Β͔
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ͤͣʹ ΛऔΓग़ͤΔ
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ͤͣʹ ΛऔΓग़ͤΔ ✓ ͷܕϦΫΤετ͔Βਪ͞ΕΔ
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]
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
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<T.Response, NSError>
҆શͰ͍͍͢
ϦΫΤετͷఆٛ
public protocol Request { typealias Response: Any var URLRequest: NSURLRequest?
{ get } func responseFromObject(object: AnyObject) -> Response? } Requestϓϩτίϧʹ ద߹͢Εྃ
public protocol Request { typealias Response: Any var URLRequest: NSURLRequest?
{ get } func responseFromObject(object: AnyObject) -> Response? } Requestϓϩτίϧʹ ద߹͢Εྃ ֤ΤϯυϙΠϯτͷఆٛ1ՕॴͰࡁΉ
ྫ
None
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 } }
·ΔͰ υΩϡϝϯτΛ ͔ࣸͨ͠ͷΑ͏ͳ ఆٛ
ؾ͍͍࣋ͪ
https://github.com/ ishkawa/APIKit