SlideShare a Scribd company logo
Suche senden
Hochladen
Einloggen
Registrieren
スマホアプリ開発者のためのWeb api開発入門の入門
Melden
Kenyu Miura
Folgen
Web Developer um Business Communication Service Provider
27. Mar 2014
•
0 gefällt mir
•
34,621 views
1
von
43
スマホアプリ開発者のためのWeb api開発入門の入門
27. Mar 2014
•
0 gefällt mir
•
34,621 views
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Melden
Kenyu Miura
Folgen
Web Developer um Business Communication Service Provider
Recomendados
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
98.2K views
•
107 Folien
REST API のコツ
pospome
52.2K views
•
61 Folien
Rest ful api設計入門
Monstar Lab Inc.
73.7K views
•
36 Folien
イミュータブルデータモデル(入門編)
Yoshitaka Kawashima
182.6K views
•
24 Folien
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
2.2K views
•
59 Folien
WebSocketのキホン
You_Kinjoh
24K views
•
63 Folien
Más contenido relacionado
Was ist angesagt?
目grep入門 +解説
murachue
88.8K views
•
83 Folien
サーバPUSHざっくりまとめ
Yasuhiro Mawarimichi
39.5K views
•
57 Folien
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
52.3K views
•
21 Folien
FastAPIのテンプレートプロジェクトがいい感じだった話
NipponAlgorithm
1.2K views
•
18 Folien
ゲームエンジニアのためのデータベース設計
sairoutine
33.8K views
•
32 Folien
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
34.4K views
•
46 Folien
Was ist angesagt?
(20)
目grep入門 +解説
murachue
•
88.8K views
サーバPUSHざっくりまとめ
Yasuhiro Mawarimichi
•
39.5K views
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
•
52.3K views
FastAPIのテンプレートプロジェクトがいい感じだった話
NipponAlgorithm
•
1.2K views
ゲームエンジニアのためのデータベース設計
sairoutine
•
33.8K views
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
•
34.4K views
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
•
6.7K views
Guide To AGPL
Mikiya Okuno
•
98.4K views
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
•
23.1K views
The Usage and Patterns of MagicOnion
Yoshifumi Kawai
•
46.8K views
スマートフォン向けサービスにおけるサーバサイド設計入門
Hisashi HATAKEYAMA
•
23.6K views
フロー効率性とリソース効率性について #xpjug
Itsuki Kuroda
•
104.7K views
脱RESTful API設計の提案
樽八 仲川
•
13.9K views
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
•
23.1K views
シリコンバレーの「何が」凄いのか
Atsushi Nakada
•
183.5K views
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
•
12.8K views
イミュータブルデータモデルの極意
Yoshitaka Kawashima
•
23.4K views
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
•
47.9K views
Azure API Management 俺的マニュアル
貴志 上坂
•
21K views
え!?データがオンプレにあるけどPower BI で BI したいの?
Yugo Shimizu
•
14.6K views
Similar a スマホアプリ開発者のためのWeb api開発入門の入門
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
naoki ando
1.3K views
•
59 Folien
事業企画
teradonburi Terai
664 views
•
44 Folien
我が家のフロントエンド開発事情
Naoki Yamada
3.9K views
•
49 Folien
Five Steps to Culture Change を日本語で解説する 2020/11/06
Issei Hiraoka
216 views
•
22 Folien
はじめてのモバイルウェブアプリ 2
Taisuke Fukuno
2.3K views
•
31 Folien
PHP で LINE Bot をしてみる
sters
1.5K views
•
16 Folien
Similar a スマホアプリ開発者のためのWeb api開発入門の入門
(20)
パソナテック Find Your Ability 講演資料 「ディレクターにとってのWeb業界って? 」
naoki ando
•
1.3K views
事業企画
teradonburi Terai
•
664 views
我が家のフロントエンド開発事情
Naoki Yamada
•
3.9K views
Five Steps to Culture Change を日本語で解説する 2020/11/06
Issei Hiraoka
•
216 views
はじめてのモバイルウェブアプリ 2
Taisuke Fukuno
•
2.3K views
PHP で LINE Bot をしてみる
sters
•
1.5K views
モバイル開発を便利にするAWS
Satoshi Takayanagi
•
4K views
saleshub_AiDeal LP202210.pdf
ssuser8de8212
•
468 views
リモートワーカー働き方実態とテレワーク導入企業事例について
ZappyLink Co.,Ltd.
•
1.4K views
福井で「しあわせデザイナー」になるために
Miho Yamamori
•
1.8K views
企業向けmBaaS「AppPot」を使ったサーバー開発なしの高速モバイルアプリ開発
Ryohei Sogo
•
1.1K views
スマートフォンアプリケーション開発の最新動向
Tsutomu Ogasawara
•
5.6K views
就職説明会 181215 株式会社mofmof
DIVE INTO CODE Corp.
•
743 views
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
•
18.9K views
DevLOVE関西2016.2.5 地道にAWS構築自動化に取り組んでいるお話し
Akira Nagata
•
3.7K views
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
Kazuya Sugimoto
•
2.4K views
DeviceConnect向けCordovaプラグインを作ってみた
Device WebAPI Consortium
•
2K views
Pixate導入についてのあれこれ
Kazuyuki Oikawa
•
2.1K views
GRAND FRONTEND OSAKA 2016 kintone説明
Yoshihiko Takeuchi
•
327 views
【デブサミ関西2014】Web技術で作るエンタープライズアプリ
アシアル株式会社
•
2.5K views
スマホアプリ開発者のためのWeb api開発入門の入門
1.
スマホアプリ開発者のための Web API開発⼊入⾨門の⼊入⾨門
2.
Agenda ⾃自⼰己紹介など Web APIとは
なぜWeb APIが必要か Web API開発の基本 パフォーマンス
3.
Talknoteとは? 社内コミュニケーションサービス
4.
Talknoteとは? 「共通の価値観が浸透した「いい会社」をつくる。」 ことをミッションに、サービス運営をしています。
5.
⾃自⼰己紹介 ミウラ @mxxxxkxxxx 雑⾷食型情報処理理技術者
2014/02にTalknoteへJoin 前職:グリーにて内製プロダクトの企画・開発 最近の趣味:何でもかんでもAWSのマネージドサービスにのっ けて勝⼿手にスケールしてくれたらいいなと妄想をすること
6.
Web APIとは Web API
= インターネット経由で利利⽤用できるAPI API(Application Programming Interface) ソフトウェアコンポーネントが互いにやりと りするのに使⽤用するインタフェースの仕様 例例えばsocket listen(), accept(), recv(), send(), etc.
7.
Web APIとは Web APIにはSOAPやRESTなどがあ る
今回はREST APIのお話
8.
Web APIとは iPhoneアプリ MV C サーバ C V M
DBユーザ サーバアプリ
9.
なぜWeb APIが必要か データの妥当性 コミュニケーションの正当性
マルチデバイス対応
10.
なぜWeb APIが必要か データの妥当性 iPhone アプリ サーバ ユーザ 商品
購⼊入 トランザクション 購⼊入履履歴 データ作成 https://hoge.io/purchase POST いずれかで失敗したら ロールバック 成功 or 失敗 購⼊入履履歴 データ作成 購⼊入履履歴 データ作成
11.
サーバ なぜWeb APIが必要か コミュニケーションの正当性 ユーザ ゲーム アプリ ユーザ ユーザ ランキング
データ 妥当なデータが担保する コミュニケーションの 正当性 https://hoge.io/ranking ゲーム アプリ ゲーム アプリ
12.
なぜWeb APIが必要か マルチデバイス対応 サーバ ユーザ iPhone アプリ ユーザ Android
アプリ ユーザ PC Web 新 ロジック ビジネスロジックに変更更が あってもWeb APIは影響を受 けず、クライアントアプリケー ションを改修する必要がない。 旧 ロジック Web API
13.
Web API開発の基本 URL ドメインモデル
14.
Web API開発の基本 REST API
-‐‑‒ HTTPメソッドでCRUD操作 POST -‐‑‒ Create 例例)POST /article … 記事を作成する GET -‐‑‒ Read 例例)GET /article/1 … ID=1の記事を参照 する URL
15.
Web API開発の基本 REST API
-‐‑‒ HTTPメソッドでCRUD操作 PUT -‐‑‒ Update 例例)PUT /article/1 … ID=1の記事を更更新する DELETE -‐‑‒ Delete 例例)DELETE /article/1 … ID=1の記事を削除 する URL
16.
Web API開発の基本 URL iPhone アプリ サーバアプリ ユーザ 記事作成
Controller /article[/1] POST GET PUT DELETE 成功 記事 成功 成功 View JSON 記事参照 記事更更新 記事削除 Model Article RDBMS articles
17.
Web API開発の基本 URL iPhone アプリ サーバアプリ ユーザ 記事作成
Controller /article ①POST ⑥成功 id=1 View JSON Model Article RDBMS articles ②Article 作成 ③articlesテーブル レコード作成 ④作成したレ コードのid取得 ⑤レンダリング
18.
Web API開発の基本 URL iPhone アプリ サーバアプリ ユーザ Controller /article/1 ①GET
id=1 ⑤記事 id=1 View JSON 記事参照 Model Article RDBMS articles ②Article 取得 ③articlesテーブル レコード取得 ④レンダリング
19.
Web API開発の基本 最近APIバージョニングが話題 https://api.talknote.com/hoge
https://api.talknote.com/1/hoge 参考:APIのバージョニングは限局分岐でや るのが良良い -‐‑‒ http://kenn.hatenablog.com/ entry/2014/03/06/105249 URL
20.
Web API開発の基本 トランザクションスクリプトとは? アクションより起動される⼀一連の⼿手続き
引⽤用元:ひがやすを blog -‐‑‒ http:// d.hatena.ne.jp/higayasuo/20080519/ 1211183826 要はいわゆる「⼿手続き型」なプログラム 次で述べるドメインモデルの対義語(みたいな感じ) ドメインモデル
21.
Web API開発の基本 ドメインモデルとは? オブジェクト指向と親和性の⾼高い概念念
ドメイン内の名詞によって体系化されたモデル 引⽤用元:ひがやすを blog -‐‑‒ http:// d.hatena.ne.jp/higayasuo/20080519/ 1211183826 ドメインモデル
22.
Web API開発の基本 ドメイン内の名詞って? ECを⼀一つのドメインとして例例えると… ドメインモデル EC ユーザ 認証 商品 購⼊入
23.
Web API開発の基本 Web APIはドメインモデルで設計しよう
ドメインモデルのメリット DRY 疎結合 ってことは変更更に強い。 ドメインモデル
24.
Web API開発の基本 Web APIはドメインモデルで設計しよう
ドメインモデルのデメリット トランザクションスクリプトより設計が難 しい ドメインモデル貧⾎血症に陥る可能性 ドメインモデル
25.
パフォーマンス • 基本はIO •
病は気から • 性能劣劣化はIOから • クソシステムはデータ設計から
26.
パフォーマンス ということでRDBMSでパフォーマン ス稼ぐお話をちょこっと Web APIというよりサーバのお話 ですが…
MySQL前提
27.
パフォーマンス アプリが発⾏行行するクエリはとにかくexplainしよう ActiveRecordやその他ORM経由でもデバッグロ グ等にSQLを吐かせるように 漢のコンピュータ道でexplainの⾒見見⽅方を詳解して います。
http://nippondanji.blogspot.jp/2009/03/ mysqlexplain.html
28.
パフォーマンス アプリが発⾏行行するクエリはとにかくexplainしよう index効いていないクエリがないように サービスが成⻑⾧長してくると、index効いてい ないクエリのせいでDBサーバのCPUが100% に張りつきはじめます。
indexが効いていてもフルスキャンしている ようじゃダメ
29.
パフォーマンス
30.
パフォーマンス
31.
パフォーマンス
32.
パフォーマンス すでにサービス上で動いているクエリの 性能が⼗十分に稼げていない場合 張れるのであればindex張る ⾼高トラフィックでindex張った瞬間にア ラートが⾶飛びそうで怖いのであれば…
ヒントを駆使してみる
33.
パフォーマンス ヒントの例例 MySQLの結合は原則ネスティッドループ結合 結合順序によっては効いてほしいindexが効かなかったり等の 原因により、⾛走査するレコード数が⾮非常に多くなる。
結合順序はオプティマイザが決定する。 開発者が結合順序を制御したい場合、STRAIGHT_̲JOIN で制御可能。 合わせてindexを制御するUSE|IGNORE|FORCE INDEX構⽂文 も有効な場合がある 他にもいろいろ
34.
パフォーマンス クエリの発⾏行行数が無駄に多くて性能劣劣化を招く ケースもあります。 N+1問題 ①userテーブルから10レコード取得する
②user.idをキーとしてuser_̲profileテーブル からレコードを逐次取得する ①=1回, ②=10回クエリを発⾏行行することに なる
35.
パフォーマンス クエリの発⾏行行数が無駄に多くて性能劣劣化を招くケースもあり ます。 N+1問題 ActiveRecordでLazy
Loadingする場合などに発⽣生 防⽌止策 結合して1クエリで取得する select * from user u inner join user_̲profile up on u.id = up.user_̲id Eager Loading
36.
パフォーマンス ⾼高トラフィックになってくると… drop tableしただけでサービスに影響で たり
ハードリンク張らずにdrop tableする とファイルシステム的にすぐデータを 消そうとするためにIOが発⽣生し、終わ るまでメタデータをロックしてしまう
37.
パフォーマンス そういうときはハードリンク絡めて drop tableしてみよう
38.
1テーブル1ibd/frm前提 パフォーマンス MySQL ファイルシステム データ /var/mysql/data/messages.ibdmessages
39.
①ibd/frmにハードリンク張る $ ln
/var/mysql/data/messages.ibd /home/admin/messages.ibd パフォーマンス MySQL ファイルシステム データ /var/mysql/data/messages.ibd /home/admin/messages.ibd messages
40.
②drop table mysql>
drop table messages; パフォーマンス MySQL ファイルシステム データ /var/mysql/data/messages.ibd /home/admin/messages.ibd messages drop table messages; ハードリンクが残っているので まだ物理理削除されない
41.
③作成しておいたハードリンクを穏やかに削除 $ ionice
-‐‑‒c 3 rm -‐‑‒f /home/admin/messages.ibd パフォーマンス MySQL ファイルシステム データ /home/admin/messages.ibd
42.
④完了了 パフォーマンス MySQL ファイルシステム
43.
ご清聴ありがとうございました