Open4
【Firebase】Firestore x Functions構成に関する所感
メモ
- triggerかcallableか
Callable functionsのメリット
FirebaseにはCallable functionsと呼ばれる専用のAPIが準備されています。このAPIにはAuth情報も含まれているのでREST APIを作るよりも安全に実装することが可能です。
Cloud Functionsに処理を任せることの最大のメリットはセキュリティルールをバイパスする事です。運用が開始され、セキュリティルールを強固にしていった時必ず権限の持たせ方に困ることがあります。
参考
Callable functionの構成
- リクエストモデルの定義
- リクエストモデルのバリデーション
- 処理
- 処理ごとのバリデーション
- レスポンスモデルの定義
- それぞれのバリデーションに弾かれた際のExceptionモデルの定義
その他
- Firestoreのデータ変更であればTransactionを貼る
基本型
export const yourFunction = functions
.region('asia-northeast1')
.runWith({ memory: '2GB' })
.https.onCall(
async (data: Params, context): Promise<Response> => {
...
}
)
エラーハンドリング
クライアントへのエラー渡し
-
functions.https.HttpsError
:Cloud Functionsで発生したHTTPエラーを表すクラス - 次のようなプロパティを持つ
- code: HTTPステータスコード。例えば、400 Bad Requestや401 Unauthorizedなど。
- message: エラーメッセージ。
- details: エラーの詳細情報。
-
functions.https.HttpsError
を使用することで、Cloud Functionsで発生したHTTPエラーを明確に表現することが可能
Functions標準のhttpsエラー
'ok'
'cancelled'
'unknown'
'invalid-argument'
'deadline-exceeded'
'not-found'
'already-exists'
'permission-denied'
'resource-exhausted'
'failed-precondition'
'aborted'
'out-of-range'
'unimplemented'
'internal'
'unavailable'
'data-loss'
'unauthenticated'
参考
Case1. Stripeのエラーハンドリング
Stripeのエラーコード:https://stripe.com/docs/error-codes#payment-intent-action-required
try {
await stripe.customers.retrieve('cus_dummy')
} catch (e) {
if (e instanceof Stripe.errors.StripeError) {
console.log(`[Error: ${e.code}] ${e.message}`)
} else {
console.log(e)
}
}
Stripeから取得したErrorをカスタムエラーに変換
Charges APIとPaymentIntent APIについて
The Payment Intents API is the unifying API for all Stripe products and payment methods. While we are not deprecating Charges, new features are only available with the Payment Intents API.
参考