狠狠撸

狠狠撸Share a Scribd company logo
Swi$%らしい%API%クライアント
!"APIKit"を使う"!
宇佐見!公輔!@usamik26
宇佐見!公輔!@usamik26
? フェンリル株式会社"iOS"アプリプログラマ
? WWDC"2015"参加
? Objec1ve3C"好き
? Swi5"最近好きになった
? Haskell"勉強中
APIKit
APIKit
APIKit
? Swi%&で&Web&API&クライアント実装をするためのライブラリ
? h.ps://github.com/ishkawa/APIKit
? 3&月の&potato>ps&でご本人による紹介
? その後、仕様変更&バージョンアップ
? 実案件で採用しました
础笔滨碍颈迟&#虫27;を使ったコード
API$を使う側のコード
let request = HogeApi.Endpoint.Login(user: "hoge", pass: "hoge")
HogeApi.sendRequest(request) { response in
switch response {
case .Success(let box):
let loginResponse = box.value // 正常レスポンス
...
case .Failure(let box):
let error = box.value // NSError
...
API$を実装する側のコード$(1)
class HogeApi: API {
override class var baseURL: NSURL {
return NSURL(string: "https://hogehoge/api")!
}
class Endpoint {
// この中に各エンドポイントのクラスを実装します
// 今回は別ファイルに分けて extension で実装しました
}
}
API$を実装する側のコード$(2)
extension HogeApi.Endpoint {
class Login: Request {
let user: String
let pass: String
var URLRequest: NSURLRequest? {
return HogeApi.URLRequest(method: .GET, path: "login",
parameters: ["user": user, "pass": pass])
}
typealias Response = LoginResponse
static func responseFromObject(object: AnyObject) -> Response? {
return LoginResponse(object)
}
...
}
API$を実装する側のコード$(3)
extension HogeApi.Endpoint {
...
class LoginResponse {
let json: JSON // SwiftyJSON
let token: String
init (_ object: AnyObject) {
let json = JSON(object)
self.json = json
self.token = json["token"].stringValue
}
}
}
础笔滨碍颈迟&#虫27;の利点
従来のパターン
? API%の%comple,on%handler%に、response%と%error%が両方ある
? response%:%成功時のレスポンス
? 别谤谤辞谤%:%失败时のエラー
従来パターンの问题点
APIKit'のコード(再掲)
let request = HogeApi.Endpoint.Login(user: "hoge", pass: "hoge")
HogeApi.sendRequest(request) { response in
switch response {
case .Success(let box):
let loginResponse = box.value // LoginResponse
...
case .Failure(let box):
let error = box.value // NSError
...
础笔滨碍颈迟&#虫27;の利点
an#typical/Result/の活用
enum Result<T, E> {
case Success(Box<T>)
case Failure(Box<E>)
}
? response"は"Result<T.Response, NSError>"型
? .Success"のとき"LoginResponse"型
? .Failure"のとき"NSError"型
Designed(for(Safety
Designed(for(Safety
? Swi%&の特徴のひとつ
? C&言語が「プログラマを信用する」思想であるのと対照的
? 例えば&Op*onal&はこの特徴を実現するためのキー機能のひとつ
? Op*onal&型を&unwrap&しないと普通の型として扱えない
? null&参照がなくなって安全
础笔滨碍颈迟&#虫27;の利点
? レスポンスが明確で不明な状態がない
? Swi%&らしい&=&Designed&for&Safety
まとめ
Swi$%を使って安全なコードを書こう

More Related Content

Similar to APIKit (20)

ノビィハンズオン
ノビィハンズオンノビィハンズオン
ノビィハンズオン
青島 英和
?
API スタブをえらんでみた
API スタブをえらんでみたAPI スタブをえらんでみた
API スタブをえらんでみた
daylilyfield
?
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
Amazon Web Services Japan
?
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
Tomohiro Ichimura
?
Google Play Developer APIを使ってみた
Google Play Developer APIを使ってみたGoogle Play Developer APIを使ってみた
Google Play Developer APIを使ってみた
shinya sakemoto
?
Android study part4
Android study part4Android study part4
Android study part4
shinya sakemoto
?
Sl study 20150804-soft-layer-apibasic-shibata
Sl study 20150804-soft-layer-apibasic-shibataSl study 20150804-soft-layer-apibasic-shibata
Sl study 20150804-soft-layer-apibasic-shibata
Naoki Shibata
?
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよはじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
Shohei Okada
?
iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1
Kaname Noto
?
Amazon api gatewayで web apiをサーバーレスで構築しよう
Amazon api gatewayで web apiをサーバーレスで構築しようAmazon api gatewayで web apiをサーバーレスで構築しよう
Amazon api gatewayで web apiをサーバーレスで構築しよう
Yoichi Toyota
?
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-CMix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Goichi Hirakawa
?
Tokyowebmining5 yokkuns
Tokyowebmining5 yokkunsTokyowebmining5 yokkuns
Tokyowebmining5 yokkuns
Yohei Sato
?
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App InventorHands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hong Chen
?
appengine ja night #24 Google Cloud Endpoints and BigQuery
appengine ja night #24 Google Cloud Endpoints and BigQueryappengine ja night #24 Google Cloud Endpoints and BigQuery
appengine ja night #24 Google Cloud Endpoints and BigQuery
Ryo Yamasaki
?
API Gateway / AWS CLI
API Gateway / AWS CLIAPI Gateway / AWS CLI
API Gateway / AWS CLI
Operation Lab, LLC.
?
Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1
Gosuke Miyashita
?
厂飞颈蹿迟と颁辞肠辞补笔辞诲蝉て?始めるサクサク颈翱厂开発!
厂飞颈蹿迟と颁辞肠辞补笔辞诲蝉て?始めるサクサク颈翱厂开発! 厂飞颈蹿迟と颁辞肠辞补笔辞诲蝉て?始めるサクサク颈翱厂开発!
厂飞颈蹿迟と颁辞肠辞补笔辞诲蝉て?始めるサクサク颈翱厂开発!
Koji Shiraishi
?
ノビィ取扱い説明书
ノビィ取扱い説明书ノビィ取扱い説明书
ノビィ取扱い説明书
青島 英和
?
ノビィハンズオン
ノビィハンズオンノビィハンズオン
ノビィハンズオン
青島 英和
?
API スタブをえらんでみた
API スタブをえらんでみたAPI スタブをえらんでみた
API スタブをえらんでみた
daylilyfield
?
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
Amazon Web Services Japan
?
Google Play Developer APIを使ってみた
Google Play Developer APIを使ってみたGoogle Play Developer APIを使ってみた
Google Play Developer APIを使ってみた
shinya sakemoto
?
Sl study 20150804-soft-layer-apibasic-shibata
Sl study 20150804-soft-layer-apibasic-shibataSl study 20150804-soft-layer-apibasic-shibata
Sl study 20150804-soft-layer-apibasic-shibata
Naoki Shibata
?
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよはじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
はじめての Go 言語のプロジェクトを AWS Lambda + API Gateway でやったのでパッケージ構成を晒すよ
Shohei Okada
?
iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1iOS13 SDK による 全機能置き換え Part1
iOS13 SDK による 全機能置き換え Part1
Kaname Noto
?
Amazon api gatewayで web apiをサーバーレスで構築しよう
Amazon api gatewayで web apiをサーバーレスで構築しようAmazon api gatewayで web apiをサーバーレスで構築しよう
Amazon api gatewayで web apiをサーバーレスで構築しよう
Yoichi Toyota
?
Mix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-CMix and Match / Swift and Objective-C
Mix and Match / Swift and Objective-C
Goichi Hirakawa
?
Tokyowebmining5 yokkuns
Tokyowebmining5 yokkunsTokyowebmining5 yokkuns
Tokyowebmining5 yokkuns
Yohei Sato
?
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App InventorHands on PhotoBlog App with WordPress REST API and App Inventor
Hands on PhotoBlog App with WordPress REST API and App Inventor
Hong Chen
?
appengine ja night #24 Google Cloud Endpoints and BigQuery
appengine ja night #24 Google Cloud Endpoints and BigQueryappengine ja night #24 Google Cloud Endpoints and BigQuery
appengine ja night #24 Google Cloud Endpoints and BigQuery
Ryo Yamasaki
?
Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1Walter ファミリーの紹介 at Shibuya.go#1
Walter ファミリーの紹介 at Shibuya.go#1
Gosuke Miyashita
?
厂飞颈蹿迟と颁辞肠辞补笔辞诲蝉て?始めるサクサク颈翱厂开発!
厂飞颈蹿迟と颁辞肠辞补笔辞诲蝉て?始めるサクサク颈翱厂开発! 厂飞颈蹿迟と颁辞肠辞补笔辞诲蝉て?始めるサクサク颈翱厂开発!
厂飞颈蹿迟と颁辞肠辞补笔辞诲蝉て?始めるサクサク颈翱厂开発!
Koji Shiraishi
?
ノビィ取扱い説明书
ノビィ取扱い説明书ノビィ取扱い説明书
ノビィ取扱い説明书
青島 英和
?

More from Kosuke Usami (20)

SnapKit
SnapKitSnapKit
SnapKit
Kosuke Usami
?
View 系ライブラリに関する悩み
View 系ライブラリに関する悩みView 系ライブラリに関する悩み
View 系ライブラリに関する悩み
Kosuke Usami
?
RxSwift
RxSwiftRxSwift
RxSwift
Kosuke Usami
?
Auto Layout Tips
Auto Layout TipsAuto Layout Tips
Auto Layout Tips
Kosuke Usami
?
RxSwift x APIKit
RxSwift x APIKitRxSwift x APIKit
RxSwift x APIKit
Kosuke Usami
?
RxSwift x Realm
RxSwift x RealmRxSwift x Realm
RxSwift x Realm
Kosuke Usami
?
RxSwift
RxSwiftRxSwift
RxSwift
Kosuke Usami
?
Eddystone Beacon
Eddystone BeaconEddystone Beacon
Eddystone Beacon
Kosuke Usami
?
Xamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作るXamarin で Apple Watch アプリを作る
Xamarin で Apple Watch アプリを作る
Kosuke Usami
?
iBeacon Applications
iBeacon ApplicationsiBeacon Applications
iBeacon Applications
Kosuke Usami
?
Swift Library
Swift LibrarySwift Library
Swift Library
Kosuke Usami
?
JXUG Conference 2 West
JXUG Conference 2 WestJXUG Conference 2 West
JXUG Conference 2 West
Kosuke Usami
?
すごい贬补蝉办别濒濒読书会
すごい贬补蝉办别濒濒読书会すごい贬补蝉办别濒濒読书会
すごい贬补蝉办别濒濒読书会
Kosuke Usami
?
Xamarin.iOS
Xamarin.iOSXamarin.iOS
Xamarin.iOS
Kosuke Usami
?
CotEditor Script
CotEditor ScriptCotEditor Script
CotEditor Script
Kosuke Usami
?
Affine Transform
Affine TransformAffine Transform
Affine Transform
Kosuke Usami
?
Semantic Versioning
Semantic VersioningSemantic Versioning
Semantic Versioning
Kosuke Usami
?
Mac アプリの Retina 対応
Mac アプリの Retina 対応Mac アプリの Retina 対応
Mac アプリの Retina 対応
Kosuke Usami
?
Mountain Lion Sharing Service
Mountain Lion Sharing ServiceMountain Lion Sharing Service
Mountain Lion Sharing Service
Kosuke Usami
?
OS X LionのVersions対応
OS X LionのVersions対応OS X LionのVersions対応
OS X LionのVersions対応
Kosuke Usami
?

APIKit