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