İçe Aktarma ve Dışa Aktarma
Projeleri yedekleme veya transfer amaçlı taşınabilir .mpz dosyaları olarak dışa aktarın ve diğer tenantlara içe aktarın. Ayrıca proje küçük resimlerini yönetin.
Proje Paketleri (.mpz)
.mpz formatı, aşağıdakileri içeren bir mindzie Paket Zip dosyasıdır:
- Proje ayarları ve meta veriler
- Tüm veri setleri ve konfigürasyonları
- İncelemeler ve not defterleri
- Gösterge tabloları ve paneller
- Blob depolama dosyaları (olay kayıtları, ekler)
Proje Dışa Aktarımı
GET /api/{tenantId}/project/{projectId}/download
Projeyi .mpz (mindzie Paket Zip) dosyası olarak dışa aktarır.
Yol Parametreleri
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Tenant kimliği |
projectId |
GUID | Evet | Dışa aktarılacak proje |
Yanıt
Aşağıdaki özelliklere sahip ikili dosya indirmesi döner:
- Content-Type:
application/octet-stream - Dosya adı:
{projectName}.mpz
Kullanım Durumları
- Yedekleme: Önemli projelerin düzenli yedeklerini oluşturma
- Geçiş: Projeleri tenantlar veya örnekler arasında taşıma
- Şablonlar: Yeni analizler için yapılandırılmış bir projeyi şablon olarak dışa aktarma
Proje İçe Aktarımı
POST /api/{tenantId}/project/import
Bir projeyi .mpz dosyasından içe aktarır.
Yol Parametreleri
| Parametre | Tip | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Hedef tenant |
İstek
- Content-Type:
multipart/form-data - Dosya parametresi:
file(.mpz dosyası)
Kısıtlamalar
| Kısıtlama | Değer |
|---|---|
| Maksimum dosya boyutu | 1 GB |
| Dosya uzantısı | .mpz olmalıdır |
| Dosya formatı | Geçerli bir mindzie proje dışa aktarımı olmalıdır |
Yanıt (200 OK)
{
"success": true,
"projectId": "99999999-9999-9999-9999-999999999999",
"projectName": "Imported Project",
"datasetsImported": 2,
"investigationsImported": 3,
"dashboardsImported": 1,
"message": "Project imported successfully"
}
Yanıt Alanları
| Alan | Tip | Açıklama |
|---|---|---|
success |
boolean | İçe aktarımın başarılı olup olmadığı |
projectId |
GUID | Yeni oluşturulan projenin ID'si |
projectName |
string | İçe aktarılan projenin adı |
datasetsImported |
integer | İçe aktarılan veri seti sayısı |
investigationsImported |
integer | İçe aktarılan inceleme sayısı |
dashboardsImported |
integer | İçe aktarılan gösterge tablosu sayısı |
message |
string | İnsan tarafından okunabilir durum mesajı |
Hata Yanıtları
Geçersiz İstek (400):
{
"success": false,
"errorMessage": "Invalid file format. Expected .mpz file."
}
Küçük Resim Yönetimi
Proje küçük resimleri proje listesinde gösterilir ve görsel tanımlama sağlar.
Küçük Resim Alma
GET /api/{tenantId}/project/{projectId}/thumbnail
Projenin küçük resim görselini alır.
Yanıt (200 OK)
{
"projectId": "87654321-4321-4321-4321-210987654321",
"hasThumbnail": true,
"base64Image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
Yanıt Alanları
| Alan | Tip | Açıklama |
|---|---|---|
projectId |
GUID | Proje kimliği |
hasThumbnail |
boolean | Küçük resmin var olup olmadığı |
base64Image |
string | Veri URI ön ekiyle birlikte base64 kodlu görüntü |
Küçük Resmi Güncelleme
POST /api/{tenantId}/project/{projectId}/thumbnail
Projenin küçük resim görselini günceller.
İstek Gövdesi
{
"base64Image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
Not: Base64 dizisi veri URI ön eki (data:image/jpeg;base64, veya data:image/png;base64, gibi) ile birlikte olmalıdır.
Yanıt (200 OK)
{
"message": "Thumbnail updated successfully"
}
Küçük Resmi Kaldırma
DELETE /api/{tenantId}/project/{projectId}/thumbnail
Projenin küçük resim görselini kaldırır.
Yanıt (200 OK)
{
"message": "Thumbnail removed successfully"
}
Uygulama Örnekleri
cURL
# Projeyi dosyaya dışa aktar
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/download" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
--output project_backup.mpz
# Projeyi dosyadan içe aktar
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/import" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-F "file=@project_backup.mpz"
# Küçük resmi al
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/thumbnail" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
# Küçük resmi güncelle (base64 dosyasından)
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/thumbnail" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"base64Image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUg..."}'
# Küçük resmi kaldır
curl -X DELETE "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/thumbnail" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN"
Python
import requests
import base64
from pathlib import Path
TENANT_ID = '12345678-1234-1234-1234-123456789012'
BASE_URL = 'https://your-mindzie-instance.com'
class ProjectExportManager:
def __init__(self, token):
self.headers = {
'Authorization': f'Bearer {token}'
}
def export_project(self, project_id, output_path):
"""Projeyi .mpz dosyasına dışa aktar."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/download'
response = requests.get(url, headers=self.headers, stream=True)
response.raise_for_status()
with open(output_path, 'wb') as f:
for chunk in response.iter_content(chunk_size=8192):
f.write(chunk)
print(f"{output_path} olarak dışa aktarıldı")
return output_path
def import_project(self, file_path):
"""Projeyi .mpz dosyasından içe aktar."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/import'
with open(file_path, 'rb') as f:
files = {'file': (Path(file_path).name, f, 'application/octet-stream')}
response = requests.post(url, headers=self.headers, files=files)
response.raise_for_status()
result = response.json()
print(f"İçe aktarılan proje: {result['projectName']}")
print(f" Veri setleri: {result['datasetsImported']}")
print(f" İncelemeler: {result['investigationsImported']}")
print(f" Gösterge tabloları: {result['dashboardsImported']}")
return result
def get_thumbnail(self, project_id):
"""Proje küçük resmini base64 olarak al."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/thumbnail'
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
def set_thumbnail(self, project_id, image_path):
"""Proje küçük resmini image dosyasından ayarla."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/thumbnail'
# Görüntüyü oku ve encode et
with open(image_path, 'rb') as f:
image_data = f.read()
# MIME türünü belirle
ext = Path(image_path).suffix.lower()
mime_type = 'image/jpeg' if ext in ['.jpg', '.jpeg'] else 'image/png'
# base64 veri URI oluştur
base64_data = base64.b64encode(image_data).decode('utf-8')
data_uri = f'data:{mime_type};base64,{base64_data}'
headers = {**self.headers, 'Content-Type': 'application/json'}
response = requests.post(url, json={'base64Image': data_uri}, headers=headers)
response.raise_for_status()
print(f"Proje {project_id} için küçük resim güncellendi")
return response.json()
def remove_thumbnail(self, project_id):
"""Projenin küçük resmini kaldır."""
url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/thumbnail'
response = requests.delete(url, headers=self.headers)
response.raise_for_status()
return response.json()
# Kullanım
manager = ProjectExportManager('your-auth-token')
project_id = '87654321-4321-4321-4321-210987654321'
# Projeyi yedek için dışa aktar
manager.export_project(project_id, 'my_project_backup.mpz')
# Aynı veya farklı tenant'a içe aktar
result = manager.import_project('my_project_backup.mpz')
new_project_id = result['projectId']
# Küçük resim ayarla
manager.set_thumbnail(project_id, 'project_thumbnail.png')
# Küçük resmi al
thumbnail = manager.get_thumbnail(project_id)
if thumbnail['hasThumbnail']:
print("Küçük resim mevcut")
JavaScript/Node.js
const fs = require('fs');
const path = require('path');
const FormData = require('form-data');
const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const BASE_URL = 'https://your-mindzie-instance.com';
class ProjectExportManager {
constructor(token) {
this.headers = {
'Authorization': `Bearer ${token}`
};
}
async exportProject(projectId, outputPath) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}/download`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) {
throw new Error(`Dışa aktarma başarısız: ${response.status}`);
}
const buffer = await response.arrayBuffer();
fs.writeFileSync(outputPath, Buffer.from(buffer));
console.log(`${outputPath} olarak dışa aktarıldı`);
}
async importProject(filePath) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/import`;
const formData = new FormData();
formData.append('file', fs.createReadStream(filePath));
const response = await fetch(url, {
method: 'POST',
headers: {
...this.headers,
...formData.getHeaders()
},
body: formData
});
if (!response.ok) {
throw new Error(`İçe aktarma başarısız: ${response.status}`);
}
const result = await response.json();
console.log(`İçe aktarılan proje: ${result.projectName}`);
return result;
}
async setThumbnail(projectId, imagePath) {
const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}/thumbnail`;
// Görüntüyü oku ve encode et
const imageBuffer = fs.readFileSync(imagePath);
const ext = path.extname(imagePath).toLowerCase();
const mimeType = ext === '.png' ? 'image/png' : 'image/jpeg';
const base64Data = imageBuffer.toString('base64');
const dataUri = `data:${mimeType};base64,${base64Data}`;
const response = await fetch(url, {
method: 'POST',
headers: {
...this.headers,
'Content-Type': 'application/json'
},
body: JSON.stringify({ base64Image: dataUri })
});
if (!response.ok) {
throw new Error(`Küçük resim güncellemesi başarısız: ${response.status}`);
}
return await response.json();
}
}
// Kullanım
const manager = new ProjectExportManager('your-auth-token');
// Dışa aktar ve içe aktar
await manager.exportProject('project-id', 'backup.mpz');
const imported = await manager.importProject('backup.mpz');
// Küçük resmi ayarla
await manager.setThumbnail('project-id', 'thumbnail.png');
En İyi Uygulamalar
- Düzenli Yedekleme: Önemli projelerin düzenli dışa aktarımını planlayın
- Sürüm Adlandırması: Dışa aktarma dosyası adlarında tarih kullanın (örneğin,
project_2024-01-15.mpz) - İçe Aktarım Testi: Üretim ortamı dışında bir tenantta içe aktarımları test edin
- Küçük Resim Boyutu: Küçük resimleri 100KB altında tutarak hızlı yüklenme sağlayın
- Küçük Resim Formatı: Fotoğraflar için JPEG, şeffaflık içeren grafikler için PNG kullanın