Copyright © Classmethod, Inc.
平井祐樹
29
2011/2 Classmethod入社
iOS 開発歴2年半
blog http://dev.classmethod.jp/author/hirai-yuki
Copyright © Classmethod, Inc.
って何の会社?クラスメソッド
Copyright © Classmethod, Inc.
Solutions
AWSコンサルティング
Amazonクラウドに特化したサービス提供
iOSアプリ開発
iOS/Android ネイティブアプリケーション開発
Copyright © Classmethod, Inc.
Developers.IO
Copyright © Classmethod, Inc.
Developers.IO
月間平均 80 万PV
Copyright © Classmethod, Inc.
こんな感じでしょ?
Copyright © Classmethod, Inc.
Copyright © Classmethod, Inc.
こんな感じです。
注:テーブルのお札はおもちゃです
Copyright © Classmethod, Inc.
プロジェクト登場人物
デザイナー
プロダクトオーナー
Web API担当者
iOS エンジニア
Copyright © Classmethod, Inc.
今日のお話
Web API担当者iOS エンジニア
Copyright © Classmethod, Inc.
今日のお話
Web API との付き合い方
Web API 担当者ヲ攻略セヨ
Copyright © Classmethod, Inc.
突然ですが…
Copyright © Classmethod, Inc.
プロジェクトに
参加してもらいます
Copyright © Classmethod, Inc.
イメージしてみてください
Copyright © Classmethod, Inc.
今あなたはとあるプロジェクトの
iOSエンジニアとしてアサインさ
れました。
その一方で、
サーバーサイドエンジニアが
WebAPIの実装をしています。
Copyright © Classmethod, Inc.
Web API 完成 ?
Copyright © Classmethod, Inc.
iOSの実装を進めていたあなたは
と、日頃の戦いに疲れきっている
のにも関わらずちょっと元気がで
ます。
「よし!これで結合できるぞ!」
Copyright © Classmethod, Inc.
おもむろに仕様書に目を通すと
Copyright © Classmethod, Inc.
{
"header": {
"status": "success",
"message": "..."
},
"response": {
"topics": [{
"topic_id": 123,
"topic_title": "...",
"topic_content": "...",
"category_id": 456,
"category_name": "..."
}]
}
}
Copyright © Classmethod, Inc.
あなたは気づいてしまいます。
Copyright © Classmethod, Inc.
{
"header": {
"status": "success",
"message": "..."
},
"response": {
"topics": [{
"topic_id": 123,
"topic_title": "...",
"topic_content": "...",
"category_id": 456,
"category_name": "..."
}]
}
}
Copyright © Classmethod, Inc.
{
"header": {
"status": "success",
"message": "..."
},
"response": {
"topics": [{
"topic_id": 123,
"topic_title": "...",
"topic_content": "...",
"category_id": 456,
"category_name": "..."
}]
}
}
HTTPステータスコードで
表してくれればいいのに!
Copyright © Classmethod, Inc.
このままだと…
Copyright © Classmethod, Inc.
AFHTTPRequestOperationManager *manager;
[manager GET:@"http://xxx.com/possts"
parameters:nil
success:^(...) {
// 成功時の処理
} failure:^(...) {
// 失敗時の処理
}];
エラーが発生しても
こっち
Copyright © Classmethod, Inc.
さらに
Copyright © Classmethod, Inc.
{
"header": {
"status": "success",
"message": "..."
},
"response": {
"topics": [{
"topic_id": 123,
"topic_title": "...",
"topic_content": "...",
"category_id": 456,
"category_name": "..."
}]
}
}
Copyright © Classmethod, Inc.
{
"header": {
"status": "success",
"message": "..."
},
"response": {
"topics": [{
"topic_id": 123,
"topic_title": "...",
"topic_content": "...",
"category_id": 456,
"category_name": "..."
}]
}
}
いらないのに
Copyright © Classmethod, Inc.
@interface CLMTopic : NSObject
@property (nonatomic) NSInteger topicIdentifier;
@property (nonatomic) NSString *topicTitle;
@property (nonatomic) NSString *topicContent;
@end
格好悪いなぁ
Copyright © Classmethod, Inc.
あなたは Web API 担当者に
こう提案します。
Copyright © Classmethod, Inc.
{
"topics": [{
"id": 123,
"title": "...",
"content": "...",
"category_id": 456,
"category_name": "..."
}]
}
Copyright © Classmethod, Inc.
Web API 担当者は内心こう思います。
Copyright © Classmethod, Inc.
(ったく、めんどくせぇな・・・)
Copyright © Classmethod, Inc.
そんな空気を感じてもあなたは
動じず提案を続けました。
Copyright © Classmethod, Inc.
すると、新しいAPIを手に入れる
ことができました!
これで実装への悪影響を回避する
ことができますね。
Copyright © Classmethod, Inc.
一安心もつかの間・・・
Copyright © Classmethod, Inc.
おもむろに仕様書に目を通すと
Copyright © Classmethod, Inc.
{
"categories": [{
"id": 456,
"name": "..."
}]
}
Copyright © Classmethod, Inc.
また
あなたは気づいてしまいます。
Copyright © Classmethod, Inc.
{
"topics": [{
"id": 123,
"title": "...",
"content": "...",
"category_id": 456,
"category_name": "..."
}]
}
{
"categories": [{
"id": 456,
"name": "..."
}]
}
Copyright © Classmethod, Inc.
このままだと…
Copyright © Classmethod, Inc.
@interface CLMTopic : NSObject
@property (nonatomic) NSInteger identifer;
@property (nonatomic) NSString *title;
@property (nonatomic) NSString *content;
@property (nonatomic) NSInteger categoryIdentifier;
@property (nonatomic) NSInteger categoryName;
@end
@interface CLMCategory : NSObject
@property (nonatomic) NSInteger identifier;
@property (nonatomic) NSInteger name;
@end
しっくりこない・・・
Copyright © Classmethod, Inc.
あなたは Web API 担当者に
こう提案します。
Copyright © Classmethod, Inc.
{
"topics": [{
"id": 123,
"title": "...",
"content": "...",
"category": {
"id": 456,
"name": "..."
}
}]
}
Copyright © Classmethod, Inc.
@interface CLMTopic : NSObject
@property (nonatomic) NSInteger identifer;
@property (nonatomic) NSString *title;
@property (nonatomic) NSString *content;
@property (nonatomic) CLMCategory *category;
@end
@interface CLMCategory : NSObject
@property (nonatomic) NSInteger identifier;
@property (nonatomic) NSInteger name;
@end
Copyright © Classmethod, Inc.
Web API 担当者は内心こう思います。
Copyright © Classmethod, Inc.
(ああーーあーあーー)
Copyright © Classmethod, Inc.
変な空気を感じながらも
あなたは提案を続けました。
Copyright © Classmethod, Inc.
すると、また新しいAPIを手に入
れることができました!
これでまた実装への悪影響を回避
することができますね。
Copyright © Classmethod, Inc.
一安心もつかの間・・・
Copyright © Classmethod, Inc.
おもむろに仕様書に目を通すと
Copyright © Classmethod, Inc.
目的 エンドポイント
トピック一覧取得 https://api.xxx.com/v1/topics/
カテゴリー一覧取得 https://api.xxx.com/v1/categories/
おすすめ商品取得 https://api.xxx.com/v1/products/recommend
ユーザー情報取得 https://api.example.com/v1/user/
Copyright © Classmethod, Inc.
またまた
あなたは気づいてしまいます。
Copyright © Classmethod, Inc.
ホーム画面
カテゴリー一覧取得API
おすすめ商品一覧API
ユーザー情報取得API
トピック一覧取得API
Copyright © Classmethod, Inc.
ホーム画面
カテゴリー一覧取得API
おすすめ商品一覧API
ユーザー情報取得API
トピック一覧取得API
1画面表示するのに
何個API叩きゃいいんだ!?
Copyright © Classmethod, Inc.
あなたは Web API 担当者に
こう提案します。
Copyright © Classmethod, Inc.
1 Screen, 1 API call
Copyright © Classmethod, Inc.
1 Screen, 1 API call
Copyright © Classmethod, Inc.
1 Screen, 1 API call
Copyright © Classmethod, Inc.
Web API 担当者は言いました。
Copyright © Classmethod, Inc.
「Ha?」
Copyright © Classmethod, Inc.
あなたは続けます
Copyright © Classmethod, Inc.
1画面を表示するのに、何度も異なるAPIにアクセ
スしなければならず、非効率ですし、画面を表示す
るまでに時間もかかってしまい、ユーザーを待たせ
てしまいます。これは良いユーザー体験とはいえま
せん。何度もAPIへのアクセスを繰り返すことは、
速度の問題だけでなく、データの一部だけが表示さ
れてしまうといった問題を引き起こす可能性もあり
ます。したがってとにかくホーム画面で表示する情
報を1つに詰め込んだ "ホーム画面専用" APIを作
成し、それに1回アクセスするだけですべての情報
が取得できた方が確実に利便性が高いです。
詳しくは "Web API The Good Parts" をご覧ください。
Copyright © Classmethod, Inc.
「・・・なるほどですね」
Copyright © Classmethod, Inc.
なるほどですね!
Copyright © Classmethod, Inc.
その言葉を聞いてあなたは
実装に戻りました。
Copyright © Classmethod, Inc.
すると、またまた新しいAPIを手
に入れることができました!
これでまたまた実装への悪影響を
回避することができますね。
Copyright © Classmethod, Inc.
こうして、
プロジェクトは順調に進み無事納
品することができたのでした。
Copyright © Classmethod, Inc.
Copyright © Classmethod, Inc.
まとめ
• Web API の知識は必須!
• Web API The Good Parts を読もう!
• 文句を言うのは簡単、改善案を提案
できる力を!
エンジニア戦記 〜小さなチーム、大きな未来〜

エンジニア戦記 〜小さなチーム、大きな未来〜

  • 1.
  • 2.
  • 3.
    Copyright © Classmethod,Inc. って何の会社?クラスメソッド
  • 4.
    Copyright © Classmethod,Inc. Solutions AWSコンサルティング Amazonクラウドに特化したサービス提供 iOSアプリ開発 iOS/Android ネイティブアプリケーション開発
  • 5.
    Copyright © Classmethod,Inc. Developers.IO
  • 6.
    Copyright © Classmethod,Inc. Developers.IO 月間平均 80 万PV
  • 7.
    Copyright © Classmethod,Inc. こんな感じでしょ?
  • 8.
  • 9.
    Copyright © Classmethod,Inc. こんな感じです。
  • 10.
  • 11.
    Copyright © Classmethod,Inc. プロジェクト登場人物 デザイナー プロダクトオーナー Web API担当者 iOS エンジニア
  • 12.
    Copyright © Classmethod,Inc. 今日のお話 Web API担当者iOS エンジニア
  • 13.
    Copyright © Classmethod,Inc. 今日のお話 Web API との付き合い方 Web API 担当者ヲ攻略セヨ
  • 14.
    Copyright © Classmethod,Inc. 突然ですが…
  • 15.
    Copyright © Classmethod,Inc. プロジェクトに 参加してもらいます
  • 16.
    Copyright © Classmethod,Inc. イメージしてみてください
  • 17.
    Copyright © Classmethod,Inc. 今あなたはとあるプロジェクトの iOSエンジニアとしてアサインさ れました。 その一方で、 サーバーサイドエンジニアが WebAPIの実装をしています。
  • 18.
    Copyright © Classmethod,Inc. Web API 完成 ?
  • 19.
    Copyright © Classmethod,Inc. iOSの実装を進めていたあなたは と、日頃の戦いに疲れきっている のにも関わらずちょっと元気がで ます。 「よし!これで結合できるぞ!」
  • 20.
    Copyright © Classmethod,Inc. おもむろに仕様書に目を通すと
  • 21.
    Copyright © Classmethod,Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } }
  • 22.
    Copyright © Classmethod,Inc. あなたは気づいてしまいます。
  • 23.
    Copyright © Classmethod,Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } }
  • 24.
    Copyright © Classmethod,Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } } HTTPステータスコードで 表してくれればいいのに!
  • 25.
    Copyright © Classmethod,Inc. このままだと…
  • 26.
    Copyright © Classmethod,Inc. AFHTTPRequestOperationManager *manager; [manager GET:@"http://xxx.com/possts" parameters:nil success:^(...) { // 成功時の処理 } failure:^(...) { // 失敗時の処理 }]; エラーが発生しても こっち
  • 27.
  • 28.
    Copyright © Classmethod,Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } }
  • 29.
    Copyright © Classmethod,Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } } いらないのに
  • 30.
    Copyright © Classmethod,Inc. @interface CLMTopic : NSObject @property (nonatomic) NSInteger topicIdentifier; @property (nonatomic) NSString *topicTitle; @property (nonatomic) NSString *topicContent; @end 格好悪いなぁ
  • 31.
    Copyright © Classmethod,Inc. あなたは Web API 担当者に こう提案します。
  • 32.
    Copyright © Classmethod,Inc. { "topics": [{ "id": 123, "title": "...", "content": "...", "category_id": 456, "category_name": "..." }] }
  • 33.
    Copyright © Classmethod,Inc. Web API 担当者は内心こう思います。
  • 34.
    Copyright © Classmethod,Inc. (ったく、めんどくせぇな・・・)
  • 35.
    Copyright © Classmethod,Inc. そんな空気を感じてもあなたは 動じず提案を続けました。
  • 36.
    Copyright © Classmethod,Inc. すると、新しいAPIを手に入れる ことができました! これで実装への悪影響を回避する ことができますね。
  • 37.
    Copyright © Classmethod,Inc. 一安心もつかの間・・・
  • 38.
    Copyright © Classmethod,Inc. おもむろに仕様書に目を通すと
  • 39.
    Copyright © Classmethod,Inc. { "categories": [{ "id": 456, "name": "..." }] }
  • 40.
    Copyright © Classmethod,Inc. また あなたは気づいてしまいます。
  • 41.
    Copyright © Classmethod,Inc. { "topics": [{ "id": 123, "title": "...", "content": "...", "category_id": 456, "category_name": "..." }] } { "categories": [{ "id": 456, "name": "..." }] }
  • 42.
    Copyright © Classmethod,Inc. このままだと…
  • 43.
    Copyright © Classmethod,Inc. @interface CLMTopic : NSObject @property (nonatomic) NSInteger identifer; @property (nonatomic) NSString *title; @property (nonatomic) NSString *content; @property (nonatomic) NSInteger categoryIdentifier; @property (nonatomic) NSInteger categoryName; @end @interface CLMCategory : NSObject @property (nonatomic) NSInteger identifier; @property (nonatomic) NSInteger name; @end しっくりこない・・・
  • 44.
    Copyright © Classmethod,Inc. あなたは Web API 担当者に こう提案します。
  • 45.
    Copyright © Classmethod,Inc. { "topics": [{ "id": 123, "title": "...", "content": "...", "category": { "id": 456, "name": "..." } }] }
  • 46.
    Copyright © Classmethod,Inc. @interface CLMTopic : NSObject @property (nonatomic) NSInteger identifer; @property (nonatomic) NSString *title; @property (nonatomic) NSString *content; @property (nonatomic) CLMCategory *category; @end @interface CLMCategory : NSObject @property (nonatomic) NSInteger identifier; @property (nonatomic) NSInteger name; @end
  • 47.
    Copyright © Classmethod,Inc. Web API 担当者は内心こう思います。
  • 48.
    Copyright © Classmethod,Inc. (ああーーあーあーー)
  • 49.
    Copyright © Classmethod,Inc. 変な空気を感じながらも あなたは提案を続けました。
  • 50.
    Copyright © Classmethod,Inc. すると、また新しいAPIを手に入 れることができました! これでまた実装への悪影響を回避 することができますね。
  • 51.
    Copyright © Classmethod,Inc. 一安心もつかの間・・・
  • 52.
    Copyright © Classmethod,Inc. おもむろに仕様書に目を通すと
  • 53.
    Copyright © Classmethod,Inc. 目的 エンドポイント トピック一覧取得 https://api.xxx.com/v1/topics/ カテゴリー一覧取得 https://api.xxx.com/v1/categories/ おすすめ商品取得 https://api.xxx.com/v1/products/recommend ユーザー情報取得 https://api.example.com/v1/user/
  • 54.
    Copyright © Classmethod,Inc. またまた あなたは気づいてしまいます。
  • 55.
    Copyright © Classmethod,Inc. ホーム画面 カテゴリー一覧取得API おすすめ商品一覧API ユーザー情報取得API トピック一覧取得API
  • 56.
    Copyright © Classmethod,Inc. ホーム画面 カテゴリー一覧取得API おすすめ商品一覧API ユーザー情報取得API トピック一覧取得API 1画面表示するのに 何個API叩きゃいいんだ!?
  • 57.
    Copyright © Classmethod,Inc. あなたは Web API 担当者に こう提案します。
  • 58.
    Copyright © Classmethod,Inc. 1 Screen, 1 API call
  • 59.
    Copyright © Classmethod,Inc. 1 Screen, 1 API call
  • 60.
    Copyright © Classmethod,Inc. 1 Screen, 1 API call
  • 61.
    Copyright © Classmethod,Inc. Web API 担当者は言いました。
  • 62.
  • 63.
    Copyright © Classmethod,Inc. あなたは続けます
  • 64.
    Copyright © Classmethod,Inc. 1画面を表示するのに、何度も異なるAPIにアクセ スしなければならず、非効率ですし、画面を表示す るまでに時間もかかってしまい、ユーザーを待たせ てしまいます。これは良いユーザー体験とはいえま せん。何度もAPIへのアクセスを繰り返すことは、 速度の問題だけでなく、データの一部だけが表示さ れてしまうといった問題を引き起こす可能性もあり ます。したがってとにかくホーム画面で表示する情 報を1つに詰め込んだ "ホーム画面専用" APIを作 成し、それに1回アクセスするだけですべての情報 が取得できた方が確実に利便性が高いです。 詳しくは "Web API The Good Parts" をご覧ください。
  • 65.
    Copyright © Classmethod,Inc. 「・・・なるほどですね」
  • 66.
    Copyright © Classmethod,Inc. なるほどですね!
  • 67.
    Copyright © Classmethod,Inc. その言葉を聞いてあなたは 実装に戻りました。
  • 68.
    Copyright © Classmethod,Inc. すると、またまた新しいAPIを手 に入れることができました! これでまたまた実装への悪影響を 回避することができますね。
  • 69.
    Copyright © Classmethod,Inc. こうして、 プロジェクトは順調に進み無事納 品することができたのでした。
  • 70.
  • 71.
    Copyright © Classmethod,Inc. まとめ • Web API の知識は必須! • Web API The Good Parts を読もう! • 文句を言うのは簡単、改善案を提案 できる力を!