Backend Studio (BaaS)Database & Schema Builder
BaaS EngineBackend Studio (BaaS)•7 min read•Updated November 2026

Backend Studio: Visual Database Schema Builder & Instant REST APIs

Backend Studio provides a full-featured Database-as-a-Service inside Apps Manager. Visually build schemas with rich field types and validations, track versioned migrations, and immediately consume auto-generated REST CRUD endpoints with robust filtering, full-text search, and pagination.

Jump to:

Overview & Architecture

Setting up database servers, defining ORM models, writing repetitive CRUD controllers, and configuring pagination logic consumes valuable engineering hours. Apps Manager Backend Studio provides a visual schema designer where you create Collections, specify field types and validation rules, execute safe schema migrations, and instantly access production-ready REST API endpoints at /apps/:appPublicId/db/:collection.

Core Capabilities

Visual Schema Designer: Define collections with field types including String, Number, Boolean, Date, Array, Object, Relation, and Enum.
Validation & Constraints: Enforce required fields, unique constraints, minimum/maximum values, default fallbacks, and regex patterns.
Versioned Schema Migrations: Every change is recorded in Migration History with rollback support and schema version tracking.
Instant REST CRUD API: Full CRUD operations generated automatically with zero server configuration or deployment steps.
Advanced Query Engine: Built-in support for page-based pagination, sorting, field projection, exact filtering, and full-text search.
Interactive Data Grid: View, filter, edit, delete, and export records directly from your web browser.

Detailed Implementation Guides

1Field Types & Validation Rules

When creating or modifying a collection in Backend Studio, you can configure fields using the following supported types and attributes.

Automated Timestamps & IDs

Every collection automatically provisions an immutable unique identifier (`_id`), a `createdAt` timestamp, and an `updatedAt` timestamp on every document.

Type NameJSON EquivalentSupported AttributesExample Use Case
Stringstringrequired, unique, default, minLength, maxLength, regexUsernames, titles, slug, email
Numbernumberrequired, unique, default, min, max, isIntegerPrices, inventory count, ratings, age
Booleanbooleanrequired, default (true/false)isPublished, inStock, emailVerified
Datestring (ISO 8601)required, default (now)publishedAt, expiresAt, eventDate
ArrayarrayitemType (string, number, object)tags, categories, galleryImages
Objectobjectschema definition, nested fieldsmetadata, preferences, address
Relationstring (foreign ID)targetCollection, cascadeDeleteauthorId -> Users, categoryId -> Categories
EnumstringallowedValues (comma-separated)status ("draft", "published", "archived")

2Query Parameters & Advanced Filtering

The auto-generated GET list endpoint supports expressive query parameters to retrieve exactly what your frontend or client requires.

ParameterExampleDescription
page?page=2Page number for pagination (defaults to 1)
limit?limit=25Number of documents per page (max 100, defaults to 20)
sortBy?sortBy=priceField name to sort by (defaults to createdAt)
order?order=descSort direction: "asc" (ascending) or "desc" (descending)
search?search=mechanicalFull-text search query across searchable text fields
fields?fields=title,price,statusComma-separated list of fields to return (projection)
filter?status=active&inStock=trueDirect field matching filters

REST API Reference

GET/apps/:appPublicId/db/:collection
API Key

List and paginate documents with filtering, search, and sorting

POST/apps/:appPublicId/db/:collection
API Key

Create a new document; validates payload strictly against collection schema

GET/apps/:appPublicId/db/:collection/:id
API Key

Retrieve a single document by its unique identifier

PUT/apps/:appPublicId/db/:collection/:id
API Key

Update fields on an existing document with schema validation

DELETE/apps/:appPublicId/db/:collection/:id
API Key

Permanently delete a document by ID

Step-by-Step Quickstart

11. Create a Collection in Schema Builder

Open your App, click "Backend Studio" -> "Database", then click "+ New Collection". Name it (e.g. "products"). Add fields with types and mark required fields.

22. Save Schema & Review Migration

Click "Apply Changes". Backend Studio generates a versioned schema migration, applies it to your database namespace, and logs the change.

33. Query Your Instant REST API

Your endpoints are live immediately. Use cURL, fetch, or the built-in API Explorer to perform create, read, update, and delete actions.

bash
curl -X POST "https://apps-manager.in/apps/YOUR_APP_PUBLIC_ID/db/products" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Noise-Cancelling Headphones",
    "price": 299,
    "inStock": true
  }'

Production Code Integration

JavaScript / TypeScript: Complete CRUD Operations
const BASE_URL = 'https://apps-manager.in';
const APP_PUBLIC_ID = 'app_pub_789456';
const API_KEY = 'am_key_live_xxx';

const headers = {
  'Authorization': `Bearer ${API_KEY}`,
  'Content-Type': 'application/json',
};

// 1. Create a record
async function createProduct(productData: { title: string; price: number; inStock: boolean }) {
  const res = await fetch(`${BASE_URL}/apps/${APP_PUBLIC_ID}/db/products`, {
    method: 'POST',
    headers,
    body: JSON.stringify(productData),
  });
  return res.json();
}

// 2. Query with filtering, search, and pagination
async function queryProducts(page = 1, searchQuery = '') {
  const params = new URLSearchParams({
    page: page.toString(),
    limit: '15',
    sortBy: 'price',
    order: 'asc',
    search: searchQuery,
  });

  const res = await fetch(`${BASE_URL}/apps/${APP_PUBLIC_ID}/db/products?${params}`, {
    method: 'GET',
    headers,
  });
  return res.json();
}

// 3. Update record by ID
async function updateProduct(id: string, updates: Partial<{ price: number; inStock: boolean }>) {
  const res = await fetch(`${BASE_URL}/apps/${APP_PUBLIC_ID}/db/products/${id}`, {
    method: 'PUT',
    headers,
    body: JSON.stringify(updates),
  });
  return res.json();
}
Python: Ingesting Data into Collections
import requests

BASE_URL = "https://apps-manager.in"
APP_PUBLIC_ID = "app_pub_789456"
API_KEY = "am_key_live_xxx"

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

# Create a new document
item_data = {
    "title": "Wireless Gaming Mouse",
    "price": 79.99,
    "inStock": True
}
response = requests.post(
    f"{BASE_URL}/apps/{APP_PUBLIC_ID}/db/products",
    json=item_data,
    headers=headers
)
created_item = response.json()
print("Created document ID:", created_item["data"]["_id"])

# Query products with filtering
query_params = {
    "page": 1,
    "limit": 10,
    "sortBy": "createdAt",
    "order": "desc"
}
list_res = requests.get(
    f"{BASE_URL}/apps/{APP_PUBLIC_ID}/db/products",
    params=query_params,
    headers=headers
)
print("Fetched documents:", list_res.json()["data"])

Frequently Asked Questions

Are collections separated and secure between different Apps?

Yes. Each App container has strict database multi-tenant isolation. Queries require the matching App Public ID and authorized API key.

What happens to existing records when I update a collection schema?

Backend Studio handles schema updates gracefully. When adding new fields with defaults, existing records can be populated automatically. Destructive changes (deleting fields) prompt a confirmation before generating the migration.

Start Building with Apps Manager Today

Build databases, create scraping APIs, convert websites to JSON, and issue Ed25519 cryptographic software licenses in minutes. Zero credit card required.

Get Started Free