Tích hợp Python với Firebase's REST API

Tích hợp Python với Firebase's REST API

Mở đầu

Firebase là một service database realtime hoạt động trên hệ thống clould của Google. Một số tính năng chính của Firebase:

  • Realtime Database: Database lưu trên firebase là dạng JSON. Việc đồng bộ database tới tất cả phía client đều là realtime. Đây là một tính năng cực kỳ nổi trội của Firebase.
  • Firebase Authentication: Bạn có thể dễ dàng tích hợp Firebase với hệ thống xác thực mà bạn sử dụng Google, Facebook, ... hay bạn tự viết cho các ứng dụng Mobile hoặc Web app.
  • Firebase Hosting: Tức là ở đây, bạn chỉ cần lo về phía client. Server và database thì đã có Firebase lo. Tất nhiên, bạn phải trả tiền cho Google 😄

Một số lợi ích đạt được khi sử dụng Firebase:

  • Rút ngắn thời gian phát triển: Do bạn chỉ cần quan tâm về phía client, server và database là do Firebase xử lý tự động qua các API nên thời gian phát triển đương nhiên rút ngắn đi. Firebase hỗ trợ đa nền tảng, đa ngôn ngữ. Android, iOS đều chơi được với Firebase. Python, Nodejs, Java, PHP cũng đều có thể làm bạn với Firebase.
  • Bảo mật và sự ổn định: Firebase hoạt động trên nền tảng Clould của Google. Do đó, bạn có thể yên tâm về vấn đề bảo mật và ổn định. Không cần lo lắng về việc server shutdown, tấn công mạng DDOS, mạng mẽo lúc nào cũng ổn định.
  • Tính linh hoạt và khả năng mở rộng: Firebase sử dụng cấu trúc của NoSQL nên nó hoàng toàn dễ dàng mở rộng và đáp ứng yêu cầu database lớn và realtime.

Ví dụ tích hợp Python với Firebase's REST API

Như đã nói ở trên, Firebase hỗ trợ rất nhiều ngôn ngữ, trong đó có Python. Ở ví dụ này, mình sẽ thực hiện việc tích hợp ở mức cơ bản nhất.

1. Chuẩn bị

Tất nhiên là môi trường Python 2 hoặc Python 3. Bạn cần có tài khoản Firebase và tạo project. Tạo tài khoản Firebase bạn có thể truy cập vào địa chỉ: https://firebase.google.com/ Để kết nối với Firebase bạn cần vào project của minh trên Firebase lấy ra những thông tin sau:

  • Email: email đăng nhập tài khoản firebase
  • URL Firebase: Ở đây mình có tạo ra 1 url: https://fir-fr.firebaseio.com/
  • Secret: key access tới Firebase. Bạn có thể tìm nó ở đây:

2. Cài đặt

Để kết nối với Firebase và thao tác với nó bạn cần cài 2 lib sau của Python:

  • requests
  • python-firebase

Bạn có thể cài các lib này trên cả nền tảng Python 2 và Python 3. Ví dụ này mình viết trên Python 3. Bạn có thể cài đặt 2 lib này dễ dàng qua pip

pip install requests python-firebase

3. Bắt đầu

Mình sẽ viết code trực tiếp trên Python shell cho đơn giản. Bước đầu tiên là Authentication. Nếu không authentication kết quả sẽ ra sao???

>>> from firebase.firebase import FirebaseApplication
>>> app = FirebaseApplication('https://fir-fr.firebaseio.com/', authentication=None)
>>> result = app.get('/users', None)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/minhhahao/.pyenv/versions/3.6.2/lib/python3.6/site-packages/firebase/decorators.py", line 19, in wrapped
    return f(*args, **kwargs)
  File "/Users/minhhahao/.pyenv/versions/3.6.2/lib/python3.6/site-packages/firebase/firebase.py", line 274, in get
    return make_get_request(endpoint, params, headers, connection=connection)
  File "/Users/minhhahao/.pyenv/versions/3.6.2/lib/python3.6/site-packages/firebase/decorators.py", line 19, in wrapped
    return f(*args, **kwargs)
  File "/Users/minhhahao/.pyenv/versions/3.6.2/lib/python3.6/site-packages/firebase/firebase.py", line 42, in make_get_request
    response.raise_for_status()
  File "/Users/minhhahao/.pyenv/versions/3.6.2/lib/python3.6/site-packages/requests/models.py", line 935, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 401 Client Error: Unauthorized for url: https://fir-fr.firebaseio.com/users/.json

LOL 401 Client Error: Unauthorized for url OK. Authentication nào:

>>> from firebase.firebase import FirebaseAuthentication
>>> authentication = FirebaseAuthentication(
...     secret='abcd1234',
...     email='[email protected]',
...     extra={'id': 123}
... )
>>> app = FirebaseApplication('https://fir-fr.firebaseio.com/', authentication=authentication)
>>> result = app.get('/users', None)
>>> result
{'1': 'Minh', '2': 'Ha'}

Trong đoạn code auth trên bạn cần truyền vào:

result là dữ liệu get về từ API firebase. Dữ liệu ở trên mình fix data thẳng trên console UI của Firebase.

Phần trên mình đã thực hiện việc GET all users collection. Thử GET users với id=1

>>> result = app.get('/users', '1')
>>> result
{'1': 'Minh'}

Hết thứ để GET rồi, tiếp theo là POST và PUT.

>>> new_user = 'Hao'
>>> result = app.post('/users', new_user)
>>> result
{'name': '-KxVX1rWsh_9mz9Ij4eU'}
>>> new_user2 = 'HaHa'
>>> result = app.put('/users', new_user2, 2) # update to users với id=2

-KxVX1rWsh_9mz9Ij4eU là id được Firebase tự động sinh ra. Cuối cùng là delete usersid=1z`

>>> app.delete('/users', '1')

Cơ bản là vậy!

Trên đây, mình đã giới thiệu những thông tin cơ bản nhất về việc tích hợp Python với Firebase's REST API. Cảm ơn vì đã đọc bài của mình 😄