Eylem Yönetimi

mindzieStudio projenizde eylemleri yönetmek için tam CRUD işlemleri. Eylemler, otomatik görevleri gerçekleştirmek için yürütülebilen iş akışı bileşenleridir.


API Uç Noktaları

Metod Uç Nokta Açıklama
GET /api/{tenantId}/{projectId}/action Tüm eylemleri listele
GET /api/{tenantId}/{projectId}/action/{actionId} Eylem detaylarını getir
POST /api/{tenantId}/{projectId}/action Eylem oluştur
PUT /api/{tenantId}/{projectId}/action/{actionId} Eylemi güncelle
DELETE /api/{tenantId}/{projectId}/action/{actionId} Eylemi sil
POST /api/{tenantId}/{projectId}/action/{actionId}/enable Eylemi etkinleştir
POST /api/{tenantId}/{projectId}/action/{actionId}/disable Eylemi devre dışı bırak

Tüm Eylemleri Listele

GET /api/{tenantId}/{projectId}/action

Bir proje için yapılandırılmış tüm eylemleri alın.

Yol Parametreleri

Parametre Tür Zorunlu Açıklama
tenantId GUID Evet Kiracı kimliğiniz
projectId GUID Evet Proje kimliğiniz

Yanıt (200 OK)

{
  "actions": [
    {
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "projectId": "87654321-4321-4321-4321-210987654321",
      "name": "Daily Data Refresh",
      "description": "Kaynak sistemlerden günlük veri yenileme",
      "isEnabled": true,
      "maxRunTime": 3600,
      "actionStatus": "Idle",
      "nextRunTime": "2024-01-16T06:00:00Z",
      "lastRunTime": "2024-01-15T06:00:00Z",
      "lastRunResult": "Success",
      "dateCreated": "2024-01-01T10:00:00Z",
      "dateModified": "2024-01-15T14:30:00Z",
      "createdBy": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "modifiedBy": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "triggers": [...],
      "steps": [...]
    }
  ],
  "totalCount": 1
}

Eylem Detaylarını Getir

GET /api/{tenantId}/{projectId}/action/{actionId}

Belirli bir eylem hakkında ayrıntılı bilgi alın.

Yol Parametreleri

Parametre Tür Zorunlu Açıklama
tenantId GUID Evet Kiracı kimliğiniz
projectId GUID Evet Proje kimliğiniz
actionId GUID Evet Getirilecek eylem

Yanıt (200 OK)

{
  "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
  "projectId": "87654321-4321-4321-4321-210987654321",
  "name": "Daily Data Refresh",
  "description": "Kaynak sistemlerden günlük veri yenileme",
  "isEnabled": true,
  "maxRunTime": 3600,
  "actionStatus": "Idle",
  "nextRunTime": "2024-01-16T06:00:00Z",
  "lastRunTime": "2024-01-15T06:00:00Z",
  "lastRunResult": "Success",
  "dateCreated": "2024-01-01T10:00:00Z",
  "dateModified": "2024-01-15T14:30:00Z",
  "createdBy": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "modifiedBy": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "triggers": [
    {
      "triggerId": "11111111-1111-1111-1111-111111111111",
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "triggerType": "DailyScheduler",
      "settings": "{}",
      "frequency": 1,
      "eventName": null,
      "startDate": "2024-01-01",
      "dateCreated": "2024-01-01T10:00:00Z"
    }
  ],
  "steps": [
    {
      "stepId": "22222222-2222-2222-2222-222222222222",
      "actionId": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
      "stepNumber": 1,
      "stepType": "Python",
      "description": "Veri yenileme skriptini çalıştır",
      "settings": "{\"script\": \"refresh_data.py\"}",
      "dateCreated": "2024-01-01T10:00:00Z"
    }
  ]
}

Yanıt Alanları

Alan Tür Açıklama
actionId GUID Eylemin benzersiz kimliği
projectId GUID Bu eylemin ait olduğu proje
name string Görüntülenen ad
description string Eylem açıklaması
isEnabled boolean Eylemin etkin olup olmadığı
maxRunTime integer Maksimum çalışma süresi (saniye)
actionStatus string Mevcut durum (Idle, Running, vb.)
nextRunTime datetime Bir sonraki planlanan yürütme zamanı
lastRunTime datetime Son yürütme zamanı
lastRunResult string Son yürütmenin sonucu
triggers array Tetikleyici konfigürasyonları
steps array Eylem adımı tanımları

Eylem Oluştur

POST /api/{tenantId}/{projectId}/action

Projeye yeni bir eylem oluşturun.

Yol Parametreleri

Parametre Tür Zorunlu Açıklama
tenantId GUID Evet Kiracı kimliğiniz
projectId GUID Evet Proje kimliğiniz

İstek Gövdesi

{
  "name": "Weekly Report",
  "description": "Haftalık analiz raporu oluştur",
  "isEnabled": true,
  "maxRunTime": 1800,
  "steps": [
    {
      "stepNumber": 1,
      "stepType": "Python",
      "description": "Raporu oluştur",
      "settings": "{\"script\": \"generate_report.py\"}"
    },
    {
      "stepNumber": 2,
      "stepType": "Email",
      "description": "Raporu e-posta ile gönder",
      "settings": "{\"recipients\": [\"team@company.com\"]}"
    }
  ],
  "triggers": [
    {
      "triggerType": "WeeklyScheduler",
      "frequency": 1,
      "startDate": "2024-01-08"
    }
  ]
}

İstek Alanları

Alan Tür Zorunlu Açıklama
name string Evet Eylem adı (projede benzersiz olmalı)
description string Hayır Eylem açıklaması
isEnabled boolean Hayır Eylemin etkin olup olmadığı (varsayılan: true)
maxRunTime integer Hayır Maksimum çalışma süresi saniye cinsinden (varsayılan: 3600)
steps array Evet En az bir adım gereklidir
triggers array Hayır İsteğe bağlı tetikleyici konfigürasyonları

Adım Nesnesi

Alan Tür Zorunlu Açıklama
stepNumber integer Hayır Yürütme sırası (verilmezse otomatik atanır)
stepType string Evet Tür: Python, Email, Webhook, vb.
description string Hayır Adım açıklaması
settings string Evet Adım için JSON yapılandırması

Tetikleyici Nesnesi

Alan Tür Zorunlu Açıklama
triggerType string Evet Tür: HourlyScheduler, DailyScheduler, WeeklyScheduler, MonthlyScheduler, EventTrigger
frequency integer Hayır Frekans çarpanı
startDate date Hayır Program ne zaman başlasın
eventName string Hayır Olay adı (EventTrigger için)
settings string Hayır Ek tetikleyici ayarları

Yanıt (201 Created)

Atanmış kimliklerle birlikte oluşturulan eylemi döner.

Hata Yanıtları

Çakışma (409) - İsim Çakışması

{
  "Error": "Projede bu ada sahip bir eylem zaten mevcut"
}

Eylemi Güncelle

PUT /api/{tenantId}/{projectId}/action/{actionId}

Var olan bir eylemi güncelleyin.

Yol Parametreleri

Parametre Tür Zorunlu Açıklama
tenantId GUID Evet Kiracı kimliğiniz
projectId GUID Evet Proje kimliğiniz
actionId GUID Evet Güncellenecek eylem

İstek Gövdesi

{
  "name": "Updated Weekly Report",
  "description": "Güncellenmiş açıklama",
  "isEnabled": true,
  "maxRunTime": 2400,
  "steps": [
    {
      "stepId": "22222222-2222-2222-2222-222222222222",
      "stepNumber": 1,
      "stepType": "Python",
      "description": "Güncellenmiş adım",
      "settings": "{\"script\": \"updated_report.py\"}"
    }
  ],
  "triggers": [
    {
      "triggerId": "11111111-1111-1111-1111-111111111111",
      "triggerType": "DailyScheduler",
      "frequency": 1,
      "startDate": "2024-02-01"
    }
  ]
}

Tüm alanlar isteğe bağlıdır - yalnızca sağlanan alanlar güncellenecektir.

Yanıt (200 OK)

Güncellenmiş eylemi döner.


Eylemi Sil

DELETE /api/{tenantId}/{projectId}/action/{actionId}

Bir eylemi kalıcı olarak silin.

Yol Parametreleri

Parametre Tür Zorunlu Açıklama
tenantId GUID Evet Kiracı kimliğiniz
projectId GUID Evet Proje kimliğiniz
actionId GUID Evet Silinecek eylem

Yanıt (204 No Content)

Başarılı işlem sonrası boş yanıt.


Eylemi Etkinleştir

POST /api/{tenantId}/{projectId}/action/{actionId}/enable

Devre dışı bırakılmış bir eylemi etkinleştirin.

Yanıt (200 OK)

isEnabled: true ile güncellenmiş eylemi döner.


Eylemi Devre Dışı Bırak

POST /api/{tenantId}/{projectId}/action/{actionId}/disable

Bir eylemi devre dışı bırakın.

Yanıt (200 OK)

isEnabled: false ile güncellenmiş eylemi döner.


Uygulama Örnekleri

cURL

# Tüm eylemleri listele
curl -X GET "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Eylem oluştur
curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Daily Report",
    "description": "Günlük rapor oluştur",
    "isEnabled": true,
    "steps": [
      {
        "stepNumber": 1,
        "stepType": "Python",
        "description": "Rapor skriptini çalıştır",
        "settings": "{\"script\": \"daily_report.py\"}"
      }
    ],
    "triggers": [
      {
        "triggerType": "DailyScheduler",
        "frequency": 1,
        "startDate": "2024-01-15"
      }
    ]
  }'

# Eylemi güncelle
curl -X PUT "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Updated Daily Report"}'

# Eylemi sil
curl -X DELETE "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}" \
  -H "Authorization: Bearer YOUR_API_KEY"

# Eylemi etkinleştir/devre dışı bırak
curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}/enable" \
  -H "Authorization: Bearer YOUR_API_KEY"

curl -X POST "https://your-mindzie-instance.com/api/{tenantId}/{projectId}/action/{actionId}/disable" \
  -H "Authorization: Bearer YOUR_API_KEY"

Python

import requests

BASE_URL = 'https://your-mindzie-instance.com'
TENANT_ID = '12345678-1234-1234-1234-123456789012'
PROJECT_ID = '87654321-4321-4321-4321-210987654321'

class ActionManager:
    def __init__(self, api_key):
        self.headers = {
            'Authorization': f'Bearer {api_key}',
            'Content-Type': 'application/json'
        }

    def list_actions(self):
        """Tüm eylemleri listele."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def get_action(self, action_id):
        """Eylem detaylarını getir."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def create_action(self, name, steps, description=None, triggers=None):
        """Yeni eylem oluştur."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action'
        data = {
            'name': name,
            'description': description,
            'isEnabled': True,
            'steps': steps,
            'triggers': triggers or []
        }
        response = requests.post(url, json=data, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def update_action(self, action_id, **kwargs):
        """Eylemi güncelle."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}'
        response = requests.put(url, json=kwargs, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def delete_action(self, action_id):
        """Eylemi sil."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}'
        response = requests.delete(url, headers=self.headers)
        response.raise_for_status()

    def enable_action(self, action_id):
        """Eylemi etkinleştir."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}/enable'
        response = requests.post(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def disable_action(self, action_id):
        """Eylemi devre dışı bırak."""
        url = f'{BASE_URL}/api/{TENANT_ID}/{PROJECT_ID}/action/{action_id}/disable'
        response = requests.post(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

# Kullanım
manager = ActionManager('your-api-key')

# Eylem oluştur
action = manager.create_action(
    name='Daily Report',
    description='Günlük analiz raporu oluştur',
    steps=[
        {
            'stepNumber': 1,
            'stepType': 'Python',
            'description': 'Raporu oluştur',
            'settings': '{"script": "daily_report.py"}'
        }
    ],
    triggers=[
        {
            'triggerType': 'DailyScheduler',
            'frequency': 1,
            'startDate': '2024-01-15'
        }
    ]
)
print(f"Oluşturulan eylem: {action['actionId']}")

# Devre dışı bırak sonra etkinleştir
manager.disable_action(action['actionId'])
print("Eylem devre dışı bırakıldı")

manager.enable_action(action['actionId'])
print("Eylem etkinleştirildi")

# Eylemi güncelle
updated = manager.update_action(action['actionId'], name='Updated Daily Report')

# Eylemi sil
manager.delete_action(action['actionId'])
print("Eylem silindi")

JavaScript/Node.js

const BASE_URL = 'https://your-mindzie-instance.com';
const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const PROJECT_ID = '87654321-4321-4321-4321-210987654321';

class ActionManager {
  constructor(apiKey) {
    this.headers = {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    };
  }

  async listActions() {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action`;
    const response = await fetch(url, { headers: this.headers });
    if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
    return response.json();
  }

  async createAction(name, steps, description = null, triggers = []) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action`;
    const response = await fetch(url, {
      method: 'POST',
      headers: this.headers,
      body: JSON.stringify({ name, description, isEnabled: true, steps, triggers })
    });
    if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
    return response.json();
  }

  async updateAction(actionId, updates) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action/${actionId}`;
    const response = await fetch(url, {
      method: 'PUT',
      headers: this.headers,
      body: JSON.stringify(updates)
    });
    if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
    return response.json();
  }

  async deleteAction(actionId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action/${actionId}`;
    const response = await fetch(url, {
      method: 'DELETE',
      headers: this.headers
    });
    if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
  }

  async enableAction(actionId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action/${actionId}/enable`;
    const response = await fetch(url, { method: 'POST', headers: this.headers });
    if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
    return response.json();
  }

  async disableAction(actionId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/${PROJECT_ID}/action/${actionId}/disable`;
    const response = await fetch(url, { method: 'POST', headers: this.headers });
    if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
    return response.json();
  }
}

// Kullanım
const manager = new ActionManager('your-api-key');

// Eylem oluştur
const action = await manager.createAction(
  'Daily Report',
  [{ stepNumber: 1, stepType: 'Python', description: 'Skripti çalıştır', settings: '{}' }],
  'Günlük rapor oluştur',
  [{ triggerType: 'DailyScheduler', frequency: 1, startDate: '2024-01-15' }]
);

// Etkinleştir/devre dışı bırakma geçişleri
await manager.disableAction(action.actionId);
await manager.enableAction(action.actionId);

// Silme
await manager.deleteAction(action.actionId);

En İyi Uygulamalar

  1. Benzersiz İsimler: Eylem isimleri proje içinde benzersiz olmalıdır
  2. Adım Sırası: Adımlar stepNumber sırasına göre yürütülür
  3. Etkinleştir/Devre Dışı Bırak: Silmek ve yeniden oluşturmak yerine etkinleştir/devre dışı bırak uç noktalarını kullanın
  4. Tetikleyiciler: Programlama gereksinimlerinize uygun tetikleyici türlerini kullanın
  5. MaxRunTime: Kontrolsüz eylemleri önlemek için makul zaman aşımı değerleri belirleyin