Ana içeriğe geç

Function

Function bileşeni, cross-domain veya dış entegrasyon süreçlerinde kullanılmak üzere BFF ihtiyacını azaltan yapılardır. Workflow'tan bağımsız ya da workflow context'inde çalışabilir.

Schema: vnext-schema/function-definition.schema.json

Function Türleri

Function'lar üç çağırma şekli sağlar:

  1. Domain-level: /api/v1/{domain}/functions/{function} — workflow bağımsız. GET, POST, PATCH, DELETE destekler.
  2. Instance-level: /api/v1/{domain}/workflows/{workflow}/instances/{instance}/functions/{function} — instance context'inde çalışır. GET, POST, PATCH, DELETE destekler.
  3. Built-in: State, Data, View — sistem tarafından sağlanan üç sabit function (bkz. Built-in Functions).

Tanım JSON Örneği

Tek Task ile Function

Schema: function-definition.schema.json

{
"key": "function-get-customer-detail",
"version": "1.0.0",
"domain": "core",
"flow": "sys-functions",
"flowVersion": "1.0.0",
"tags": ["core", "customer", "lookup"],
"_comment": "Müşteri detay bilgisini döndüren function",
"attributes": {
"scope": "I",
"rawResponse": false,
"task": {
"order": 1,
"task": {
"key": "get-customer-detail",
"domain": "core",
"flow": "sys-tasks",
"version": "1.0.0"
},
"mapping": {
"type": "L",
"location": "./src/GetCustomerDetailMapping.csx",
"code": "<BASE64_ENCODED_CODE>",
"encoding": "B64"
}
},
"labels": [
{ "label": "Get Customer Detail", "language": "en-US" },
{ "label": "Müşteri Detay Getir", "language": "tr-TR" }
]
}
}

Çoklu Task ile Function (onExecutionTasks)

Schema: function-definition.schema.json

{
"key": "function-account-summary",
"version": "1.0.0",
"domain": "banking",
"flow": "sys-functions",
"flowVersion": "1.0.0",
"tags": ["banking", "account", "aggregation"],
"attributes": {
"scope": "I",
"onExecutionTasks": [
{
"order": 1,
"task": {
"key": "get-account-info",
"domain": "banking",
"flow": "sys-tasks",
"version": "1.0.0"
},
"mapping": {
"location": "./src/GetAccountInfoMapping.csx",
"code": "<BASE64_ENCODED_CODE>"
}
},
{
"order": 2,
"task": {
"key": "get-account-balance",
"domain": "banking",
"flow": "sys-tasks",
"version": "1.0.0"
},
"mapping": {
"location": "./src/GetAccountBalanceMapping.csx",
"code": "<BASE64_ENCODED_CODE>"
}
}
],
"output": {
"location": "./src/AccountSummaryOutput.csx",
"code": "<BASE64_ENCODED_CODE>"
},
"roles": [
{ "role": "account-viewer", "grant": "allow" },
{ "role": "guest", "grant": "deny" }
]
}
}
bilgi

onExecutionTasks kullanıldığında output alanı zorunludur. Output mapping, tüm task sonuçlarını birleştiren IOutputHandler implementasyonuna işaret eder.


Properties

Top-Level Alanlar

AlanTipZorunluPattern / KısıtAçıklama
$schemastringHayırURI formatıJSON Schema referansı
keystringEvet^[a-z0-9-]+$Function'ın benzersiz tanımlayıcısı
versionstringEvet^\d+\.\d+\.\d+(-[a-zA-Z]+\.\d+)?$Semantic versioning (Major.Minor.Patch)
domainstringEvet^[a-z0-9-]+$Function'ın ait olduğu domain
flowstringEvetSabit: sys-functionsFlow tanımlayıcısı
flowVersionstringEvet^\d+\.\d+\.\d+(-[a-zA-Z]+\.\d+)?$Flow versiyonu
tagsstring[]EvetminItems: 1Kategorilendirme ve arama etiketleri
_commentstringHayırAçıklama / yorum
attributesobjectEvetFunction davranış tanımı (aşağıda)

attributes Alanları

AlanTipZorunluAçıklama
scopestringEvetFunction kapsamı — aşağıdaki enum tablosuna bakın
taskobjectKoşulluTek task tanımı. task veya onExecutionTasks'tan biri zorunlu
onExecutionTasksarrayKoşulluSıralı çoklu task listesi. task veya onExecutionTasks'tan biri zorunlu
outputobjectKoşulluOutput mapping. onExecutionTasks tanımlıysa zorunlu
labelsarrayHayırÇoklu dil etiketleri (label + language)
rolesarrayHayırYetkilendirme rolleri (role + grant). DENY her zaman ALLOW'u geçersiz kılar
rawResponsebooleanHayırtrue: mapped rawData doğrudan response olarak döndürülür. false (varsayılan): platform kendi pattern modeli üzerinden çıktı verir. Legacy API'lerden vnext'e geçiş için

scope Enum Değerleri

DeğerAçıklama
DDomain — workflow bağımsız, domain seviyesinde çalışır
FFlow — flow seviyesinde çalışır
IInstance — belirli bir instance context'inde çalışır

task / onExecutionTasks[*] Yapısı

AlanTipZorunluAçıklama
_commentstringHayırYorum
orderintegerEvetÇalışma sırası (minimum: 1)
taskobjectEvetTask referansı — explicit veya ref (aşağıda)
mappingobjectEvetMapping kodu tanımı (aşağıda)

Task Referansı — iki formdan biri kullanılır:

FormZorunlu AlanlarAçıklama
Explicitkey, domain, flow (sabit sys-tasks), versionDoğrudan task referansı
RefrefDosya yolu ile task referansı

Mapping (taskMapping)

AlanTipZorunluVarsayılanAçıklama
typestringHayırLG = Global, L = Local. Global ise code gerekmez
locationstringHayırKod dosyası yolu (pattern: ^\.\/.*\.csx$)
codestringKoşulluMapping kodu. type = L ise zorunlu
encodingstringHayırB64Kodlama formatı: B64 (Base64) veya NAT (Native)

Role (roleGrant)

AlanTipZorunluAçıklama
rolestringEvetRol adı
grantstringEvetallow veya deny. DENY her zaman ALLOW'u geçersiz kılar

Yapı

Bir function tipik olarak şunları içerir:

  • Input mapping — request → task input
  • Task list — sıralı task'lar (HTTP, Script, Dapr Service, vb.)
  • Output mapping — task sonuçları → response

Output mapping için IOutputHandler interface implement edilir; bkz. IOutputHandler.

Tipik Kullanım Senaryoları

  • Cross-domain veri: domain A'dan domain B'ye veri çekme
  • Dış API gateway: 3rd-party API'lerini sarmalama
  • Aggregation: birden fazla kaynaktan veri toplama
  • BFF replacement: frontend'in BFF olmadan domain'le konuşması

İlgili