Kiracı Yönetimi
mindzieStudio platformunda kiracı oluşturun, listeleyin, alın ve güncelleyin.
ÖNEMLİ: Bu sayfadaki tüm endpointler Global API Anahtarı gerektirir. Kiracıya özel API anahtarları 401 Yetkisiz hatası alacaktır.
Tüm Kiracıları Listele
GET /api/tenant
Sistemdeki tüm kiracıların özet istatistiklerle birlikte sayfalanmış listesini alır.
Sorgu Parametreleri
| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
page |
tam sayı | 1 | Sayfalama için sayfa numarası |
pageSize |
tam sayı | 50 | Sayfa başına öğe sayısı (maks: 100) |
Yanıt (200 OK)
{
"tenants": [
{
"tenantId": "12345678-1234-1234-1234-123456789012",
"name": "acme-corp",
"displayName": "Acme Corporation",
"description": "Acme Corporation için ana kiracı",
"caseCount": 50000,
"maxUserCount": 100,
"maxAnalystCount": 20,
"analystCount": 12,
"userCount": 45,
"preRelease": false,
"isAcademic": false,
"autoload": true,
"dateCreated": "2024-01-15T10:30:00Z",
"isDisabled": false
}
],
"totalCount": 5,
"page": 1,
"pageSize": 50
}
Kiracı Nesnesi Alanları
| Alan | Tür | Açıklama |
|---|---|---|
tenantId |
GUID | Kiracının benzersiz tanımlayıcısı |
name |
string | Sistem içinde benzersiz isim (URL'lerde kullanılır) |
displayName |
string | Okunaklı gösterim adı |
description |
string | Kiracının açıklaması |
caseCount |
tam sayı | Tüm veri setlerindeki toplam vaka sayısı |
maxUserCount |
tam sayı | İzin verilen maksimum kullanıcı sayısı |
maxAnalystCount |
tam sayı | İzin verilen maksimum analist sayısı |
analystCount |
tam sayı | Mevcut analist sayısı |
userCount |
tam sayı | Mevcut kullanıcı sayısı |
preRelease |
boolean | Kiracının ön sürüm özelliklerine sahip olup olmadığı |
isAcademic |
boolean | Akademik bir kiracı olup olmadığı |
autoload |
boolean | Projelerin otomatik yüklenip yüklenmediği |
dateCreated |
datetime | Kiracının oluşturulma tarihi |
isDisabled |
boolean | Kiracının devre dışı olup olmadığı |
Hata Yanıtları
Yetkisiz (401):
{
"error": "Bu endpoint bir Global API anahtarı gerektirir. Kiracıya özel API anahtarları tüm kiracıları listeleyemez.",
"hint": "Global API anahtarları /admin/global-api-keys adresinden oluşturulabilir"
}
ID ile Kiracı Getir
GET /api/tenant/{tenantId}
Belirtilen ID'ye sahip belirli bir kiracının detaylı bilgilerini getirir.
Yol Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Kiracının benzersiz tanımlayıcısı |
Yanıt (200 OK)
{
"tenantId": "12345678-1234-1234-1234-123456789012",
"name": "acme-corp",
"displayName": "Acme Corporation",
"description": "Acme Corporation için ana kiracı",
"isAcademic": false,
"preRelease": false,
"maxUserCount": 100,
"maxAnalystCount": 20,
"maxCases": 100000,
"dateCreated": "2024-01-15T10:30:00Z",
"isDisabled": false
}
Hata Yanıtları
Bulunamadı (404):
{
"error": "'12345678-1234-1234-1234-123456789012' ID'li kiracı bulunamadı"
}
Kiracı Oluştur
POST /api/tenant
Sistemde gerekli tüm altyapıyla yeni bir kiracı oluşturur.
İstek Gövdesi
{
"name": "new-tenant",
"displayName": "New Tenant Corp",
"description": "Yeni kiracının açıklaması",
"maxUsers": 50,
"maxAnalyst": 10,
"maxCases": 100000,
"timeZone": "America/New_York"
}
İstek Alanları
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
name |
string | Evet | Benzersiz sistem ismi (3-63 karakter, küçük harf alfanümerik ve tire içerebilir) |
displayName |
string | Evet | Okunaklı gösterim adı |
description |
string | Hayır | Kiracının açıklaması |
maxUsers |
tam sayı | Evet | Maksimum kullanıcı sayısı |
maxAnalyst |
tam sayı | Evet | Maksimum analist sayısı |
maxCases |
tam sayı | Evet | Maksimum vaka sayısı |
timeZone |
string | Hayır | Kiracı için zaman dilimi |
Kiracı İsim Gereksinimleri
- 3-63 karakter olmalı
- Sadece küçük harf, rakam ve tire içermeli
- Boşluk veya özel karakter olmamalı
- Tüm kiracılar arasında benzersiz olmalı
Yanıt (201 Created)
{
"tenantId": "aabbccdd-1234-1234-1234-123456789012",
"name": "new-tenant",
"displayName": "New Tenant Corp",
"message": "'New Tenant Corp' kiracı başarıyla oluşturuldu",
"storageContainerCreated": true
}
Hata Yanıtları
Çakışma (409):
{
"error": "'new-tenant' ismindeki bir kiracı zaten mevcut"
}
Lisans Limiti (429):
{
"error": "Maksimum kiracı sayısına ulaşıldı. Lisansınız 10 kiracıya izin veriyor.",
"hint": "Daha fazla kiracı oluşturmak için lisansınızı yükseltin"
}
Doğrulama Hatası (400):
{
"error": "Doğrulama başarısız",
"validationErrors": [
"İsim 3 ile 63 karakter arasında olmalıdır",
"İsim sadece küçük harf, rakam ve tire içerebilir"
]
}
Kiracı Güncelle
PUT /api/tenant
Var olan bir kiracının özelliklerini günceller. Sadece sağlanan alanlar değiştirilecektir; null değerler yok sayılır.
İstek Gövdesi
{
"tenantId": "12345678-1234-1234-1234-123456789012",
"displayName": "Acme Corporation Güncellendi",
"description": "Güncellenmiş açıklama",
"maxUsers": 100,
"maxAnalyst": 25,
"maxCases": 200000,
"timeZone": "America/New_York",
"isAcademic": false,
"preRelease": true,
"isDisabled": false
}
İstek Alanları
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Güncellenecek kiracı |
displayName |
string | Hayır | Yeni gösterim adı (null = değişiklik yok) |
description |
string | Hayır | Yeni açıklama (null = değişiklik yok, "" = temizle) |
maxUsers |
tam sayı | Hayır | Maksimum kullanıcı (null = değişiklik yok) |
maxAnalyst |
tam sayı | Hayır | Maksimum analist (null = değişiklik yok) |
maxCases |
tam sayı | Hayır | Maksimum vaka (null = değişiklik yok, -1 = sınırsız) |
timeZone |
string | Hayır | Zaman Dilimi ID (null = değişiklik yok) |
isAcademic |
boolean | Hayır | Akademik bayrak (null = değişiklik yok) |
preRelease |
boolean | Hayır | Ön sürüm özellikleri (null = değişiklik yok) |
isDisabled |
boolean | Hayır | Kiracıyı devre dışı bırak (null = değişiklik yok) |
Not: Kiracı name alanı oluşturulduktan sonra değiştirilemez.
Yanıt (200 OK)
{
"tenantId": "12345678-1234-1234-1234-123456789012",
"name": "acme-corp",
"displayName": "Acme Corporation Güncellendi",
"message": "'acme-corp' kiracı başarıyla güncellendi",
"isDisabled": false
}
Hata Yanıtları
Bulunamadı (404):
{
"error": "'12345678-1234-1234-1234-123456789012' ID'li kiracı bulunamadı"
}
Doğrulama Hatası (400):
{
"error": "Doğrulama başarısız",
"validationErrors": ["Gösterim adı 255 karakteri aşamaz"]
}
Uygulama Örnekleri
cURL
# Tüm kiracıları listele
curl -X GET "https://your-mindzie-instance.com/api/tenant?page=1&pageSize=50" \
-H "Authorization: Bearer YOUR_GLOBAL_API_KEY"
# ID ile belirli kiracıyı al
curl -X GET "https://your-mindzie-instance.com/api/tenant/12345678-1234-1234-1234-123456789012" \
-H "Authorization: Bearer YOUR_GLOBAL_API_KEY"
# Kiracı oluştur
curl -X POST "https://your-mindzie-instance.com/api/tenant" \
-H "Authorization: Bearer YOUR_GLOBAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "new-tenant",
"displayName": "New Tenant Corp",
"description": "Test tenant",
"maxUsers": 50,
"maxAnalyst": 10,
"maxCases": 100000
}'
# Kiracıyı güncelle
curl -X PUT "https://your-mindzie-instance.com/api/tenant" \
-H "Authorization: Bearer YOUR_GLOBAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tenantId": "12345678-1234-1234-1234-123456789012",
"displayName": "New Tenant Corp Updated",
"maxUsers": 100,
"isDisabled": false
}'
Python
import requests
BASE_URL = 'https://your-mindzie-instance.com'
class TenantManager:
def __init__(self, global_api_key):
"""GLOBAL API anahtarı (kiracıya özel olmayan) ile başlat."""
self.headers = {
'Authorization': f'Bearer {global_api_key}',
'Content-Type': 'application/json'
}
def list_tenants(self, page=1, page_size=50):
"""Sistemdeki tüm kiracıları listele."""
url = f'{BASE_URL}/api/tenant'
params = {'page': page, 'pageSize': page_size}
response = requests.get(url, headers=self.headers, params=params)
response.raise_for_status()
return response.json()
def get_tenant(self, tenant_id):
"""Belirtilen ID'ye sahip kiracıyı getir."""
url = f'{BASE_URL}/api/tenant/{tenant_id}'
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
def create_tenant(self, name, display_name, description='', max_users=50,
max_analyst=10, max_cases=100000, timezone=None):
"""Yeni bir kiracı oluştur."""
url = f'{BASE_URL}/api/tenant'
payload = {
'name': name,
'displayName': display_name,
'description': description,
'maxUsers': max_users,
'maxAnalyst': max_analyst,
'maxCases': max_cases
}
if timezone:
payload['timeZone'] = timezone
response = requests.post(url, json=payload, headers=self.headers)
response.raise_for_status()
return response.json()
def update_tenant(self, tenant_id, display_name=None, description=None,
max_users=None, max_analyst=None, is_disabled=None):
"""Mevcut bir kiracıyı güncelle."""
url = f'{BASE_URL}/api/tenant'
payload = {'tenantId': tenant_id}
if display_name is not None:
payload['displayName'] = display_name
if description is not None:
payload['description'] = description
if max_users is not None:
payload['maxUsers'] = max_users
if max_analyst is not None:
payload['maxAnalyst'] = max_analyst
if is_disabled is not None:
payload['isDisabled'] = is_disabled
response = requests.put(url, json=payload, headers=self.headers)
response.raise_for_status()
return response.json()
# Kullanım
manager = TenantManager('your-global-api-key')
# Tüm kiracıları listele
result = manager.list_tenants()
print(f"Toplam kiracı: {result['totalCount']}")
for tenant in result['tenants']:
print(f"- {tenant['displayName']} ({tenant['name']})")
print(f" Kullanıcılar: {tenant['userCount']}/{tenant['maxUserCount']}")
# Yeni kiracı oluştur
new_tenant = manager.create_tenant(
name='test-tenant',
display_name='Test Tenant',
description='API üzerinden oluşturuldu',
max_users=25,
max_analyst=5,
max_cases=50000
)
print(f"Oluşturulan kiracı: {new_tenant['tenantId']}")
# Kiracı limitlerini güncelle
manager.update_tenant(
tenant_id=new_tenant['tenantId'],
max_users=50,
max_analyst=10
)
print("Kiracı limitleri güncellendi")
JavaScript
const BASE_URL = 'https://your-mindzie-instance.com';
class TenantManager {
constructor(globalApiKey) {
this.headers = {
'Authorization': `Bearer ${globalApiKey}`,
'Content-Type': 'application/json'
};
}
async listTenants(page = 1, pageSize = 50) {
const url = `${BASE_URL}/api/tenant?page=${page}&pageSize=${pageSize}`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
return await response.json();
}
async getTenant(tenantId) {
const url = `${BASE_URL}/api/tenant/${tenantId}`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
return await response.json();
}
async createTenant(config) {
const url = `${BASE_URL}/api/tenant`;
const response = await fetch(url, {
method: 'POST',
headers: this.headers,
body: JSON.stringify(config)
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.error || `Başarısız: ${response.status}`);
}
return await response.json();
}
async updateTenant(tenantId, updates) {
const url = `${BASE_URL}/api/tenant`;
const response = await fetch(url, {
method: 'PUT',
headers: this.headers,
body: JSON.stringify({ tenantId, ...updates })
});
if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
return await response.json();
}
}
// Kullanım
const manager = new TenantManager('your-global-api-key');
// Kiracıları listele
const tenants = await manager.listTenants();
console.log(`${tenants.totalCount} kiracı bulundu`);
// Kiracı oluştur
const newTenant = await manager.createTenant({
name: 'new-tenant',
displayName: 'New Tenant',
maxUsers: 50,
maxAnalyst: 10,
maxCases: 100000
});
console.log(`Oluşturuldu: ${newTenant.tenantId}`);
// Kiracıyı güncelle
await manager.updateTenant(newTenant.tenantId, {
displayName: 'Güncellenmiş Kiracı Adı',
maxUsers: 100
});
En İyi Uygulamalar
- Global API Anahtarları: Kiracı yönetimi için sadece global API anahtarlarını kullanın - sistem genelinde önemli ayrıcalıklara sahiptirler
- Lisans Farkındalığı: Yeni kiracı oluşturmadan önce kiracı sayısını lisans limitlerine karşı izleyin
- Kapasite Planlaması: Beklenen kullanıma göre uygun kullanıcı ve analist limitlerini belirleyin
- İsimlendirme Kuralları: Kiracı isimleri için tutarlı, küçük harf ve tire kullanılan isimlendirme kullanın