Azure SQL Database
miniblue emulates Azure SQL Database via ARM endpoints. This is a stub implementation -- it stores server and database metadata but does not connect to a real SQL Server instance.
API endpoints
SQL Servers
| Method | Path | Description |
|---|---|---|
PUT |
/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Sql/servers/{name} |
Create or update server |
GET |
/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Sql/servers/{name} |
Get server |
DELETE |
/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Sql/servers/{name} |
Delete server |
GET |
/subscriptions/{sub}/resourceGroups/{rg}/providers/Microsoft.Sql/servers |
List servers |
Databases
| Method | Path | Description |
|---|---|---|
PUT |
.../servers/{server}/databases/{db} |
Create or update database |
GET |
.../servers/{server}/databases/{db} |
Get database |
DELETE |
.../servers/{server}/databases/{db} |
Delete database |
GET |
.../servers/{server}/databases |
List databases |
Create a SQL server
curl -X PUT "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server" \
-H "Content-Type: application/json" \
-d '{
"location": "eastus",
"properties": {
"administratorLogin": "sqladmin"
}
}'
Response (201 Created):
{
"id": "/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server",
"name": "my-sql-server",
"type": "Microsoft.Sql/servers",
"location": "eastus",
"properties": {
"fullyQualifiedDomainName": "localhost",
"state": "Ready",
"version": "12.0",
"administratorLogin": "sqladmin",
"provisioningState": "Succeeded"
}
}
Get a server
curl "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server"
List servers
Delete a server
curl -X DELETE "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server"
Returns 202 Accepted. Deleting a server also removes all child database metadata.
Create a database
The parent server must exist first.
curl -X PUT "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server/databases/appdb" \
-H "Content-Type: application/json" \
-d '{
"location": "eastus",
"sku": {
"name": "Basic",
"tier": "Basic"
}
}'
Response (201 Created):
{
"id": "/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server/databases/appdb",
"name": "appdb",
"type": "Microsoft.Sql/servers/databases",
"location": "eastus",
"properties": {
"status": "Online",
"collation": "SQL_Latin1_General_CP1_CI_AS",
"maxSizeBytes": 2147483648,
"currentServiceObjectiveName": "Basic",
"provisioningState": "Succeeded"
},
"sku": {
"name": "Basic",
"tier": "Basic",
"capacity": 5
}
}
Get a database
curl "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server/databases/appdb"
List databases
curl "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server/databases"
Delete a database
curl -X DELETE "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server/databases/appdb"
Returns 202 Accepted.
azlocal
# Use curl for SQL ARM endpoints (azlocal does not yet have sql commands)
# Create server
curl -X PUT "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server" \
-H "Content-Type: application/json" -d '{"location":"eastus"}'
# Create database
curl -X PUT "http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers/my-sql-server/databases/mydb" \
-H "Content-Type: application/json" -d '{"location":"eastus"}'
# Verify the resource group
azlocal group show --name myRG
Full example
#!/bin/bash
set -e
BASE="http://localhost:4566/subscriptions/sub1/resourceGroups/myRG/providers/Microsoft.Sql/servers"
# Create resource group
curl -s -X PUT "http://localhost:4566/subscriptions/sub1/resourcegroups/myRG" \
-H "Content-Type: application/json" \
-d '{"location": "eastus"}'
# Create SQL server
curl -s -X PUT "${BASE}/my-sql" \
-H "Content-Type: application/json" \
-d '{"location": "eastus", "properties": {"administratorLogin": "sqladmin"}}' | jq .name
# Create databases
curl -s -X PUT "${BASE}/my-sql/databases/production" \
-H "Content-Type: application/json" -d '{"location":"eastus"}' | jq .name
curl -s -X PUT "${BASE}/my-sql/databases/staging" \
-H "Content-Type: application/json" -d '{"location":"eastus"}' | jq .name
# List databases
curl -s "${BASE}/my-sql/databases" | jq '.value[].name'
# Clean up
curl -s -X DELETE "${BASE}/my-sql"
Limitations
- Stub only -- no real SQL Server backend. Server and database metadata is stored in memory.
- Request body properties (SKU, location, collation) are accepted and reflected in responses but have no backend effect.
- No elastic pools, firewall rules, or auditing.