Android Backend Example
A mobile-optimized backend for Android applications with JWT authentication, device registration, and data synchronization.
Application Code
# app.py
import time
from flaxon import Flaxon, HTTPException
from flaxon.security import JWTBackend, login_required
from flaxon.validation import Schema, fields
app = Flaxon("android-backend")
# JWT Authentication
jwt_backend = JWTBackend(secret_key="your-secret-key")
# Schemas
class LoginRequest(Schema):
email = fields.Email(required=True)
password = fields.String(required=True, min_length=8)
class RegisterRequest(Schema):
username = fields.String(required=True, min_length=3, max_length=30)
email = fields.Email(required=True)
password = fields.String(required=True, min_length=8)
class DeviceRegistration(Schema):
device_id = fields.String(required=True, min_length=8)
platform = fields.Choice(["android", "ios"], required=True)
notification_token = fields.String(required=True, min_length=16)
app_version = fields.String(required=False)
class SyncRequest(Schema):
last_sync = fields.Integer(required=False, default=0)
local_changes = fields.List(required=False)
# In-memory storage
users = {}
devices = {}
posts = []
user_id_counter = 1
post_id_counter = 1
@app.post("/api/v1/auth/register")
async def register(data: RegisterRequest):
if data.email in users:
raise HTTPException(400, "Email already registered")
user = data.to_dict()
user["id"] = user_id_counter
user_id_counter += 1
user["created_at"] = int(time.time())
users[data.email] = user
token = await jwt_backend.create_token({"id": user["id"], "email": user["email"]})
return {"user": user, "token": token}
@app.post("/api/v1/auth/login")
async def login(data: LoginRequest):
user = users.get(data.email)
if not user:
raise HTTPException(401, "Invalid credentials")
if user["password"] != data.password:
raise HTTPException(401, "Invalid credentials")
token = await jwt_backend.create_token({"id": user["id"], "email": user["email"]})
return {"user": user, "token": token}
@app.post("/api/v1/devices")
@login_required
async def register_device(request, data: DeviceRegistration):
user = getattr(request, "user")
device = data.to_dict()
device["user_id"] = user["id"]
device["registered_at"] = int(time.time())
devices[data.device_id] = device
return {"success": True, "device": device}
@app.get("/api/v1/profile")
@login_required
async def get_profile(request):
user = getattr(request, "user")
return {"user": users.get(user["email"])}
@app.put("/api/v1/profile")
@login_required
async def update_profile(request):
user = getattr(request, "user")
data = await request.json()
stored_user = users.get(user["email"])
if stored_user:
stored_user.update(data)
return {"updated": True, "user": stored_user}
raise HTTPException(404, "User not found")
Key Concepts
- JWT Authentication: Secure token-based auth
- Device Registration: Track mobile devices
- Mobile-Optimized: Versioned API routes
- Profile Management: User profile CRUD