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. Keşif (/info, catalog) yanıtlarında görünürlüğü belirler. New v0.0.88 itibarıyla doğrudan custom function çağrısında bir gate değildir — yalnızca authorize fonksiyonu değerlendirir; bkz. Authorization → Çağıran rollerinin çözümlenmesi
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
verbs Newstring[]HayırFunction'ın kabul ettiği HTTP verb'leri — aşağıdaki enum tablosuna bakın. Tanımsız/boş ise tüm verb'ler kabul edilir (geriye dönük uyumlu)
inputSchema Newobject / arrayHayırRequest body'yi tanımlayan sys-schemas kontratı. Tanımlıysa body, kural değerlendirmesini kazanan şemaya karşı valide edilir (hata → 400). Tek referans veya rule-based dizi — bkz. Custom Functions → Fonksiyon Kontratı
outputSchema Newobject / arrayHayırResponse body'yi tanımlayan sys-schemas kontratı. Yalnızca deklaratif — runtime'da enforce edilmez
inputView Newobject / arrayHayırClient'ın function input'unu toplamak için render edeceği sys-views kontratı. Tek referans veya rule-based dizi
outputView Newobject / arrayHayırClient'ın function output'unu sunmak için render edeceği sys-views kontratı. Tek referans veya rule-based dizi
cacheobjectHayırRead-through cache yapılandırması — bkz. Custom Functions → Fonksiyon Cache

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

verbs Enum Değerleri New

DeğerAçıklama
GETRequest body'siz okuma
POSTRequest body ile oluşturma / çağırma
PATCHRequest body ile kısmi güncelleme
DELETESilme

Deklare edilmemiş bir verb ile yapılan çağrı 405 Method Not Allowed döner; response'un Allow header'ı deklare edilen verb'leri listeler. verbs tanımsız veya boşsa kısıtlama uygulanmaz. Yalnızca body taşıyamayan verb'ler (ör. sadece ["GET"]) ile birlikte inputSchema tanımlamak doğrulama hatasıdı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$)
codestring | objectKoşulluMapping kodu. type = L ise zorunlu. encoding: "REF" ise string yerine bir sys-mappings referans objesi
encodingstringHayırB64Kodlama formatı: B64 (Base64), NAT (Native) veya REF (sys-mappings referansı)
scripts NewobjectHayırHelper referansları (helpers[]) ve izinli assembly'ler (allowedAssemblies[]) — bkz. Mapping Bileşeni

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