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
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
4k
Introducing Wire: Dependency Injection by Code Generator
ishkawa
12
1.4k
Declarative UICollectionView
ishkawa
28
8.6k
Nuxt.jsが掲げる"Universal Vue.js Applications"とは何者か
ishkawa
10
2.9k
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
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
230
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
240
Claude Code 再入門 会話の渡し方の4つの道具 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
150
穢れた技術選定について
watany
18
5.8k
SoccerMaster: A Vision Foundation Model for Soccer Understanding
kzykmyzw
0
150
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
1.2k
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
3
1.6k
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
2
440
発表と総括 / Presentations and Summary
ks91
PRO
0
150
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
310
シンガポールで登壇してきます
yama3133
0
270
非定型なドキュメントを効率よくリファクタする 〜えぇ!?仕様書27本の移行が1日で終わったって!?〜
subroh0508
2
590
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
380
Designing for Performance
lara
611
70k
Chasing Engaging Ingredients in Design
codingconduct
0
240
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
Skip the Path - Find Your Career Trail
mkilby
1
170
Statistics for Hackers
jakevdp
799
230k
Prompt Engineering for Job Search
mfonobong
0
380
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
290
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
320
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
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