App Inventor 2 网络微数据库后台搭建教程 - 自建TinyWebDB服务

« 返回首页

概述

App Inventor的TinyWebDB需要一个后台服务。默认服务有限制(速率、数据量),生产环境需要自建后台。

已有文档other/tinywebdb.md 介绍了TinyWebDB组件基本用法。本文聚焦自建后台的完整方案。

方案 难度 免费 稳定性
默认AI2服务 低(有限制)
AI2Server(Gitee) ⭐⭐
LeanDB ⭐⭐
Python Flask ⭐⭐⭐
Node.js ⭐⭐⭐
云函数 ⭐⭐

方案一:AI2Server(推荐新手)

Gitee上的AI2Server 是专为App Inventor设计的开源后台。

特点

  • 一键部署
  • 支持批量用户管理
  • 提供API接口
  • 支持数据存储和检索

部署步骤

  1. 访问 https://gitee.com/fsyz/Ai2Server
  2. 下载源码
  3. 部署到支持PHP的主机或Docker

App Inventor配置

当 Screen1.初始化
  设 TinyWebDB1.服务地址 = "https://your-server.com/ai2server/"

批量添加用户

参考 https://gitee.com/fsyz/README/blob/master/AI2server/BatchAddUser.md

方案二:LeanDB(推荐)

LeanDB 是专为App Inventor设计的云端数据库服务。

特点

  • 免费使用
  • 无需部署
  • RESTful API
  • 支持数据查询

配置步骤

  1. 访问 https://kevinkun.cn/leandb/(新地址:https://wangsk789.github.io/leandb/)
  2. 注册账号,创建应用
  3. 获取API地址
  4. 在App Inventor中配置TinyWebDB的ServiceURL
当 Screen1.初始化
  设 TinyWebDB1.服务地址 = "https://leandb-api.example.com/api/your-app-id/"

方案三:Python Flask自建

完全控制的后台方案。

安装

pip install flask

服务端代码

# tinywebdb_server.py
from flask import Flask, request, jsonify
import json, os

app = Flask(__name__)
DATA_FILE = 'data.json'

def load_data():
    if os.path.exists(DATA_FILE):
        with open(DATA_FILE, 'r', encoding='utf-8') as f:
            return json.load(f)
    return {}

def save_data(data):
    with open(DATA_FILE, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)

@app.route('/getvalue', methods=['GET'])
def get_value():
    tag = request.args.get('tag', '')
    data = load_data()
    if tag in data:
        return jsonify([tag, data[tag]])
    return jsonify([tag, "NO_DATA"])

@app.route('/storevalue', methods=['POST'])
def store_value():
    data = load_data()
    body = request.json
    tag = body.get('tag', '')
    value = body.get('value', '')
    data[tag] = value
    save_data(data)
    return jsonify({"status": "OK", "tag": tag})

@app.route('/deletevalue', methods=['POST'])
def delete_value():
    data = load_data()
    body = request.json
    tag = body.get('tag', '')
    if tag in data:
        del data[tag]
        save_data(data)
    return jsonify({"status": "OK"})

@app.route('/search', methods=['GET'])
def search():
    keyword = request.args.get('keyword', '')
    data = load_data()
    results = []
    for tag, value in data.items():
        if keyword in tag:
            results.append([tag, value])
    return jsonify(results)

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

部署到云服务器

# 使用nohup后台运行
nohup python3 tinywebdb_server.py &

# 或使用gunicorn(生产环境)
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:5000 tinywebdb_server:app

App Inventor配置

设 TinyWebDB1.服务地址 = "http://your-server-ip:5000/"

方案四:Supabase(已有文档)

extensions/Supabase.md 已有详细文档,此处仅提及。

方案五:CloudBase云开发

extensions/CloudBase.md 已有腾讯云CloudBase文档。

安全性考虑

API密钥验证

# 在Flask中添加验证
API_KEY = "your-secret-key"

@app.before_request
def check_auth():
    key = request.headers.get('X-API-Key', '')
    if key != API_KEY:
        return jsonify({"error": "Unauthorized"}), 401

App Inventor端:

设 TinyWebDB1.请求头 = ["X-API-Key: your-secret-key"]

HTTPS

生产环境必须使用HTTPS。可以使用:

  • Let’s Encrypt(免费SSL证书)
  • Cloudflare(免费HTTPS代理)
  • Nginx反向代理+SSL

常见问题

Q1: TinyWebDB返回”NO_DATA”?

  • 检查ServiceURL是否正确(末尾要有/
  • 确认tag是否正确
  • 检查服务端数据文件是否存在

Q2: 自建服务外网无法访问?

  • 检查防火墙是否开放端口
  • 云服务器需要在安全组中开放端口
  • 检查服务是否正在运行

Q3: 数据量大了性能下降?

JSON文件方案不适合大数据量。解决方案:

  • 改用SQLite/MySQL数据库
  • 使用Redis缓存
  • 部署到性能更好的服务器

总结

方案 推荐度 适合
AI2Server ⭐⭐⭐ 快速上手
LeanDB ⭐⭐⭐⭐ 生产使用
Flask自建 ⭐⭐⭐⭐ 完全控制
Supabase ⭐⭐⭐⭐⭐ 专业项目

版权声明:MIT App Inventor 官方文档采用 CC BY-SA 4.0 授权,本文档由 ai2claw 🐝 整理。

文档反馈