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
RESTful Firebase with Vue.js
Search
gyarasu
December 12, 2019
Technology
1
400
RESTful Firebase with Vue.js
2019.12.12 Sendai Frontend Meetup #3
https://sfeug.connpass.com/event/156387/
gyarasu
December 12, 2019
Tweet
Share
More Decks by gyarasu
See All by gyarasu
QAエンジニア組織立ち上げはじめの一歩
gyarasu
0
41
Firebase Cloud Messaging のベストプラクティス を、探している
gyarasu
1
2.6k
Next.jsではじめるPWA
gyarasu
2
1.5k
doda AIジョブサーチ PWAとパフォーマンスの話
gyarasu
0
1.6k
副業時代のプロジェクトマネジメント
gyarasu
3
2.9k
PWA基礎_1
gyarasu
0
290
PWA基礎_2
gyarasu
0
170
PWA基礎_3
gyarasu
0
150
フロントエンドエンジニア (実稼働まで) ひとりでできるもん
gyarasu
0
2.6k
Other Decks in Technology
See All in Technology
分解して理解する Aspire
nenonaninu
2
990
Exadata Database Service on Cloud@Customer セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
2
1.5k
NFV基盤のOpenStack更新 ~9世代バージョンアップへの挑戦~
vtj
0
340
開発組織を進化させる!AWSで実践するチームトポロジー
iwamot
1
170
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
RayでPHPのデバッグをちょっと快適にする
muno92
PRO
0
190
What's new in Go 1.24?
ciarana
1
110
株式会社Awarefy(アウェアファイ)会社説明資料 / Awarefy-Company-Deck
awarefy
3
11k
短縮URLをお手軽に導入しよう
nakasho
0
140
LINE NEWSにおけるバックエンド開発
lycorptech_jp
PRO
0
200
実は強い 非ViTな画像認識モデル
tattaka
2
1.2k
プロダクトエンジニア 360°フィードバックを実施した話
hacomono
PRO
0
140
Featured
See All Featured
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.4k
We Have a Design System, Now What?
morganepeng
51
7.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Practical Orchestrator
shlominoach
186
10k
It's Worth the Effort
3n
184
28k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Transcript
RESTful Firebase with Vue.js 2019/12/12 Sendai Frontend Meetup #3 吉次
洋毅
誰? • 吉次洋毅(ヨシツグヒロキ) • 1991年生まれ(28歳) • 経歴 ◦ 某レストラン検索サイトでバックエンドエンジニアなど ◦
某HR会社でエンジニアをしつつ ◦ フリーランスで受託開発&他社さんの開発やプロジェクトマネジメントのお手伝い • 趣味 ◦ 一人旅 & 写真 & スーパー銭湯 ◦ スマブラ(VIPボーダー周辺をウロウロ・ゼロサムユーザ) ◦ ポケモン(約20年ぶりにはじめました) @gyarasu
今日はFirebaseとVue.jsのお話 ✕
話すこと • SPAとFirebaseによるサーバレス開発 • Firebaseへの依存とサービスグロース • RESTful Firebase • まとめ
• CORSとの戦い(時間あれば)
Chapter. 1 SPAとFirebaseによる サーバレス開発
サーバレスでアプリケーションを作れる! Frontend Backend
Firebaseの良いところ • 必要なものがだいたい揃ってる ◦ 認証 ◦ 関数の実行 ◦ データベース(NoSQL) ◦
ファイルストレージ • 低コスト ◦ お金 ◦ 導入する手間(firebase-toolsでの操作) ◦ 学習コスト
Vue.jsの良いところ • vue cliで簡単にバックエンドから独立したSPAの プロジェクトが作れる • 学習コストが低い • 成熟したエコシステム •
豊富なドキュメント
新規サービスのスタートアップには最適! ✕
最高!...なのか??
Chapter. 2 Firebaseへの依存と サービスのグロース
そのSPA、切り離せますか? Frontend Backend
サービスグロースで起こりうること • 短い時間単位で大量の書き込み ◦ Firestoreで耐えうるか? • コードベースの肥大化 ◦ それに耐えうるアーキテクチャ設計ができているか? •
パフォーマンス問題の顕在化 ◦ Cloud Functionsのコールドスタート問題など
結果的にどうなるか?
それぞれ別のものに置換される可能性がある Frontend Backend
Chapter. 3 RESTful Firebase
Firebase Cloud Functionの呼び出し方 • onCall(とても便利) ◦ 呼び出し可能関数では、Firebase Authentication と FCM
トークンが 使用可能な場合、自動的にリクエストに追加されます。 ◦ functions.https.onCall トリガーは、リクエスト本文を自動的に逆シリア ル化し、認証トークンを検証します。 ◦ 使えるメソッドはPOSTのみ • onRequest(すこし頑張る必要あり) ◦ HTTP 関数のイベント ハンドラは onRequest() イベントをリッスンしま す。このイベントは、Express ウェブ フレームワークによって管理され るルーターとアプリをサポートします。
onCallは諸刃の剣(ただ、とても楽) APIの実装に依存 クライアントの実装に依存 チームの人「グロースしてきたからAPIはgolang×k8sで作り直そうか」
こうなっていると、 そう簡単には切り離せない
バックエンドとフロントエンドのつ ながりを標準的な インターフェースにして それぞれのポータビリティを確保 したい
なので、 onRequestベースで作る。
RESTful Firebase(Cloud Functions) https://github.com/gyarasu/express-ts-cloud-functions • Express.js • TypeScript • Cloud
Functions最適化 →URL設計への制約 • POSTメソッド以外も使え る(標準的なHTTPメソッ ド、ステータスコード) • Clean Architectureに基 づく関心の分離 • CORS対応
標準化による疎結合化 REST API
Chapter. 4 まとめ
まとめ • スタートアップは高速に! ◦ SPAやFirebaseは大いに活用すべき • サービスグロースを視野に入れた設計を! ◦ 切り離せる?捨てやすい?代替可能? ◦
できるだけ標準的な仕組みで作ろう
Chapter. 5 (番外編)CORSとの戦い
onRequestベースのAPIで起こること • CORS(Cross-Origin-Resource-Sharing) ◦ サーバサイドでのCORS対応が必要 ◦ クライアントサイドでのsimple request化(preflightを飛ば さない) •
Firebase Authの認証トークンを自前で管理 • onCallを使ってると、そのへんをよしなにやってく れる
単純リクエストでのやり取り • クロスオリジンにConetnt−Type: appllication/jsonのリクエスト をするとpreflightを引き起こす • preflightにより、正しくクロスオリジンへのリクエストが通るかを 確認する • サーバ側でのCORS対応によらず、preflightは発生する
単純リクエストでのやり取り appllication/json appllication/x-www-for m-urlencoded 実装 プラグイン/ミド ルウェア form object json
object vue-axios-cors Express.js リクエスト
開発者が意識する実装部分は RESTful。プラグインと middlewareで吸収。
axiosを拡張したvueプラグイン https://github.com/gyarasu/vue-axios-cors • axios(HTTPクライアン ト)のVue向けプラグイン • POST / PUTの場合に自 動的に単純リクエストに
変換 • preflightを避ける (Authorizationヘッダつ いてる場合は不可避)
Express.jsでのjsonへの変換 https://expressjs.com/en/api.html 一応、上記のようなドキュメントがあるが、明示的に書かなく てもやってくれるようす。
FirebaseでRESTfulに作って開 発スピードとポータビリティの両 立を試みよう!
単純リクエスト補足 • Authroizationヘッダを付与している場合、 appllication/x-www-form-urlencodedに変換してもpreflightは 飛びます • どうしてもpreflightを避けたい場合は認証情報をbodyに含め るなどすると一応実現はできる(あまり一般的ではない) • Cloud
FunctionsはFirebase Hostingと連携してカスタムド メインを使えるので、そもそもCORSにしないのが一番シンプ ル(いろいろやったけど結局これが結論...)
参考リンク • https://firebase.google.com/docs/functions/callabl e-reference?hl=ja • https://firebase.google.com/docs/functions/http-ev ents • https://developer.mozilla.org/ja/docs/Web/HTTP/C ORS
終