1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

REST APIで使用するFirebase Realtime Database

Last updated at Posted at 2021-09-10

はじめに

Webアプリを作った際、(無料枠マニアだと)サーバーサイドのログなどの保管場所に悩む場合があります
ストレージやRDBなど無料枠が無いものが多くそれらにログを出力するのも面倒です
そんなとき、REST APIで使用するFirebase Realtime Databaseがとても楽です
JsonをPostするだけでデータが追加でき、Keyを指定してGetすると対象データが取得できます

#Realtime Databaseを作る
####1. Firebaseのプロジェクトを作る
####2. RealtimeDatabaseを作る
image.png
####3. ルールを適当に書く

これをやらないと誰でもDBに書き込めてしまう
下記ルールであればGUIDが分からなければ書き込めない
本来は認証機能を使うべき
orderBy等を使用する場合はIndexを貼る必要がある
image.png

####4. DBの作成完了!

#####DBのURL
image.png

+.jsonでアクセス出来ます
image.png

使ってみる

#####コード

test.py
import requests
import json

url = "https://datastore-da5b8-default-rtdb.firebaseio.com/E87A1EE20027454E80F85BFE88513E5B/"

#POSTでInsert
res = requests.post(url + ".json", data='{"name":"tanaka","age":99}')
print("Post-Result:"+res.text)
res_data = json.loads(res.text)

#GETでSelect
res = requests.get(url + res_data["name"] + ".json")
print("Get-Result:"+res.text)

#####実行結果

Post-Result:{"name":"-MjFSvNWSHlmj-0psVlK"}
Get-Result:{"age":99,"name":"tanaka"}

###ちょっと便利なラッパー

repository.py
import requests

class Repository:
    repository_url = ""

    def __init__(self, repository_url):
        self.repository_url = repository_url

    def select(self, repository_key, queryString=""):
        return requests.get(self.repository_url + repository_key + ".json" + queryString)

    def insert(self, repository_key, data):
        return requests.post(self.repository_url + repository_key + ".json", data=data.encode('utf-8'))

    def update(self, repository_key, data):
        return requests.patch(self.repository_url + repository_key + ".json", data=data.encode('utf-8'))

    def delete(self, repository_key):
        return requests.delete(self.repository_url + repository_key + ".json")

####ラッパーの使い方

test2.py
import json
from repository import Repository

# さまざまな要素に基づいてデータをフィルタリングするクエリを構築できます。
# 初めに、orderBy パラメータを使用して、データをどのようにフィルタリングするかを指定します。
# 次に、orderBy を他の 5 つのパラメータ(limitToFirst、limitToLast、startAt、endAt、equalTo)のいずれかと組み合わせます。

url = "https://datastore-da5b8-default-rtdb.firebaseio.com/E87A1EE20027454E80F85BFE88513E5B/"
repository = Repository(url)

res = repository.insert("", json.dumps({"key": 123, "value": "text"}))
print("insert:"+res.text)
res = repository.update(json.loads(res.text)["name"], json.dumps(
    {"key": 432, "value": "aaa"}))
print("update:"+res.text)
res = repository.insert("", json.dumps({"key": 678, "value": "bbb"}))
print("insert:"+res.text)
res = repository.select("", '?orderBy="key"&limitToFirst=1')
print("select:"+res.text)

res = repository.select("", '?orderBy="value"&equalTo="bbb"')
print("select:"+res.text)

res = repository.select("")
print("select:"+res.text)
object_list = json.loads(res.text)

for key in object_list.keys():
    print("child:"+key)
    res = repository.delete(key)

#####実行結果

insert:{"name":"-MjFUn6heZhSbLtwXKqa"}
update:{"key":432,"value":"aaa"}
insert:{"name":"-MjFUnL2aCWPxGaC_BUV"}
select:{"-MjFRuYFzvirMQEOqKJy":{"age":99,"name":"tanaka"}}
select:{"-MjFUnL2aCWPxGaC_BUV":{"key":678,"value":"bbb"}}
select:{"-MjFRuYFzvirMQEOqKJy":{"age":99,"name":"tanaka"},"-MjFSN-WhdkX2sWh6ayH":{"age":99,"name":"tanaka"},"-MjFSRjuToqQCwC2FLf0":{"age":99,"name":"tanaka"},"-MjFSvNWSHlmj-0psVlK":{"age":99,"name":"tanaka"},"-MjFUn6heZhSbLtwXKqa":{"key":432,"value":"aaa"},"-MjFUnL2aCWPxGaC_BUV":{"key":678,"value":"bbb"}}
child:-MjFRuYFzvirMQEOqKJy
child:-MjFSN-WhdkX2sWh6ayH
child:-MjFSRjuToqQCwC2FLf0
child:-MjFSvNWSHlmj-0psVlK
child:-MjFUn6heZhSbLtwXKqa
child:-MjFUnL2aCWPxGaC_BUV

#参考文献
https://firebase.google.com/docs/database/rest/start?hl=ja

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?