LoginSignup
1
0

Cloud Firestore REST API まとめ

Last updated at Posted at 2024-03-23

背景

とある事情で弊社が公開しているWebサービスのWeb APIをユーザー向けに公開することになった。
弊社のサービスではDBにCloudFirestoreを使用しており、CloudFirestoreにはREST APIの機能が備わっているため、それを利用することにした。

メリット・デメリット

まず初めに、自前でAPIを実装せずにFirestoreのREST APIを利用することのメリット・デメリットを整理しておく。

メリット

メリットは実装の手間を省けること。
各リソースに対してそれぞれAPIを実装する場合それなりの工数がかかるので、それを省けるのは大きなメリット。

デメリット

デメリットとしては、サービスがFirestoreに依存してしまうことが挙げられる。
例えばFirestoreからRDBに移行したいとなった場合でも、FirestoreのREST APIを使用しているユーザーがいる場合難しくなる。
また当然ながら自前実装よりもカスタマイズ性に欠け、データを取得した後にデータを加工して返したいケースなどに対応できない。

REST API利用手順

利用手順は以下の通り。

1. プロジェクトIDとAPIキーを準備しておく(firebaseコンソールで確認可能)

IDとキー.png

2. Firebase Authenticationユーザーを、メールアドレスとパスワードで登録しておく

ユーザー登録はFirebase Authentication API経由でも可能

3. Firebase AuthenticationのログインAPIにリクエストを投げる

// リクエストサンプル
// API_KEYには1で準備したAPIキーを指定する

curl 'https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=[API_KEY]' \
-H 'Content-Type: application/json' \
--data-binary '{"email":"[user@example.com]","password":"[PASSWORD]","returnSecureToken":true}'

4. ログインAPIのレスポンスにIDトークンが含まれるので控えておく

// レスポンスサンプル
// IDトークンなどの情報が返却される
{
  "localId": "ZY1rJK0eYLg...",
  "email": "[user@example.com]",
  "displayName": "",
  "idToken": "[ID_TOKEN]",
  "registered": true,
  "refreshToken": "[REFRESH_TOKEN]",
  "expiresIn": "3600"
}

5. Firestore REST APIにリクエストを投げる

// サンプルリクエスト(ドキュメントの読み取り)
// PROJECT_IDは1で準備したIDを指定する
// COLLECTION、 DOCUMENT_IDはそれぞれ取得したいコレクション名、ドキュメントID
// ID_TOKENは4で取得したIDトークン

curl \
https://firestore.googleapis.com/v1/projects/[PROJECT_ID]/databases/(default)/documents/[COLLECTION]/[DOCUMENT_ID]/' \
--header 'Authorization: Bearer [ID_TOKEN]' \
--header 'Accept: application/json' \
--compressed

6. レスポンスが200で返ってきたらOK!

注意点

IDトークンの有効期限

IDトークンは有効期限が1時間となっており、期限切れになるとAPIにアクセスできなくなる。
その場合、再度ログインしてもらうか、リフレッシュトークンを使用してトークンをリフレッシュする必要がある。
自動でリフレッシュトークンを使用してトークンをリフレッシュするなどの仕組みを検討してもよさそう。

セキュリティルール

APIでFirestoreにアクセスする場合も、Firestoreのセキュリティルールが適用される。
(IDトークンによってユーザーが特定され、そのユーザーがアクセスできないデータの場合はエラーになる)
セキュリティルールが適切に設定されていない場合、他のユーザーのデータにまでアクセス可能になるといったことが起こり得るため、ルールは適切に設定しておくこと。

おわりに

今回はCloudFirestore REST APIを利用してみました。
記事の誤りなどございましたらご指摘をお願いします。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0