משחקים עם Deta

13/01/2022

לא, זו לא שגיאת כתיב בכותרת - אכן יש מערכת ענן חינמית לגמרי בשם deta שכוללת גם בסיס נתונים וגם אפשרות לכתוב קוד ווב ב Python או Node.JS. הלכתי לשחק עם ה API שלהם כדי לראות מה אפשר לקבל בלי לשלם.

1. מה בקופסה

הסלוגן אומר:

Deta is a free cloud crafted with the developer and user experience at heart.

וזה סוג-של נכון. לקח לי שתי דקות להקים חשבון ועוד 5 דקות לקבל אתר ווב באוויר. בשביל להתחיל לעבוד אנחנו מתקינים את ה CLI Client שלהם (הוראות באתר), מפעילים משורת הפקודה deta login ואז ממלאים טופס ולוחצים על קישור במייל שנשלח אליכם.

חוץ מלהקים מערכת ווב בפייתון (עם פלאסק) הם גם תומכים ב:

  1. חיבור דומיין שלכם למערכת.

  2. הפעלת משימות מתוזמנות עם cron.

  3. אחסון קבצים עם מערכת שנקראת Data Drive (עד 10 ג'יגה).

  4. אחסון נתונים עם מערכת שנקראת Deta Base.

החיסרון היחיד שמצאתי הוא שאי אפשר למחוק פרויקט. לא הצלחתי להבין למה. וגם לא מצאתי התיחסות ל Rate Limits או דברים כאלה.

2. התוכנית הראשונה שכתבתי

בשביל המשחק כתבתי שם תוכנית פייתון שסופרת כמה בקשות POST שלחתם אליה ושומרת את התוצאה בבסיס נתונים. זה הקוד:

from flask import Flask
from deta import Deta

deta = Deta()
counters = deta.Base('counters')

app = Flask(__name__)

@app.route('/', methods=["GET"])
def get_root():
    record = counters.get('posts') or { "count": 0 }
    return f"{record['count']} POST requests were sent so far"

@app.route('/', methods=["POST"])
def post_root():
    try:
        updates = {
                "count": counters.util.increment(1)
                }
        counters.update(updates, "posts")
        record = counters.get('posts')
        return f"{record['count']} POST requests were sent so far"
    except Exception as err:
        # can only update existing records
        try:
            counters.put({ "key": "posts", "count": 1 })
            record = counters.get('posts')
            return f"{record['count']} POST requests were sent so far (including yours)"
        except Exception as err:
            return f"Error - {err}"

החלקים המעניינים ממנו לדעתי:

  1. תמיכה מלאה ב flask, וכנראה בספריות פייתון באופן כללי (אפשר לכתוב קובץ requirements.txt והם מתקינים כל מה שנמצא בו)

  2. בסיס הנתונים Deta Base מבוסס רשומות ומזכיר בסיסי נתונים NoSQL, אבל בגירסה מאוד מאוד פשוטה שלהם ועם API מסורבל. הפונקציה update לדוגמה לא מחזירה את הערך המעודכן אז בשביל לקבל אותו הייתי צריך להפעיל עוד בקשת get, מה שלא בטוח יחזיר תוצאה נכונה (ויש עוד כמה באגים מהסוג הזה בתוכנית).

  3. אפשר להשתמש רק בבסיס הנתונים, או רק ב Web Framework, או רק באחסון הקבצים, או בכולם יחד.

סך הכל מקום איחסון בחינם לפרויקטי ווב זה תמיד רעיון טוב. הייתי שמח יותר אם הם היו נותנים לי מכונה או קלאסטר קוברנטיס, אבל כשלא משלמים אי אפשר להתלונן. האתר מאוד מתאים לפרויקטי צד שלכם כשמחפשים פשוט לעלות לאוויר איזה API בפייתון או Node.JS בלי להתעסק עם שרתים.