Vücut biçimleri ve dizilerin bölünmesi
Workflow Webhooks, JSON, form kodlu, multipart ve XML gövdelerini ayrıştırır ve bir dizideki her bir öğe için bir Shopify Flow çalıştırması başlatabilir.
Her sistem JSON göndermez ve her istek tek bir konuyla ilgili değildir. İki ayar, her iki durumu da kapsar.
Vücut tipleri
Biçim, isteğin Content-Type başlığından alınır. Biçim ne olursa olsun, alan eşlemeniz aynı nokta yollarını kullanır.
| İçerik türü | Şu şekilde çözümlendi: | Tipik gönderenler |
|---|---|---|
application/json |
JSON | Çoğu API, n8n, Make, Zapier |
application/x-www-form-urlencoded |
Form alanları | Twilio, PayPal IPN, düz HTML formları |
multipart/form-data |
Form alanları ve dosya parçaları dosya adı haline gelir | Form oluşturucular, yükleme uç noktaları |
text/xml, application/xml, *+xml |
XML | Eski ERP ve taşıyıcı sistemleri |
Bilmeniz gereken iki ayrıntı:
- Geçerli bir JSON gövdesi, gönderen tarafından başka bir şekilde etiketlense bile her zaman JSON olarak okunur. Birçok araç, JSON’u “form” içerik türüyle gönderir ve bu sayede bu araçlar sorunsuz bir şekilde çalışmaya devam eder.
- Form ve XML gövdeleri, eşleştirmediğiniz alanlar içerebilir. Bu sorun değildir: Gönderici kendi yapısını kendisi belirler; dolayısıyla bu gövdeler, sizin kontrolünüz altındaki JSON için geçerli olan sıkı denetimden muaf tutulur.
curl -X POST https://your-app-url/webhook/ab12cd34 \
-H "Content-Type: application/x-www-form-urlencoded" \
-H "X-Api-Key: your-token" \
--data-urlencode "From=+15551234567" \
--data-urlencode "Body=Where is my order?"
# Map fieldOne to: From
# Map fieldTwo to: BodyXML öznitelikleri
Bir XML özniteliği, adının başına @_ öneki eklenmiş şekilde kullanılabilir; dolayısıyla <order id="7">, order.@_id olarak eşlenir ve <order><name>Bob</name></order> ise order.name olur. Değerler metin olarak gelir; bu sayede uzun kimlikler tam olarak korunur.
Dizileri serilere ayırma
Bir istek bir liste içeriyorsa - örneğin bir ERP sisteminden gelen 20 sipariş ya da bir grup stok güncellemesi - genellikle iş akışınızın tüm grup için tek seferde değil, her bir öğe için ayrı ayrı çalışmasını istersiniz.
Gelişmiş Ayarlar -> Dizileri serilere böl seçeneği altında, dizinin yoluna bir ad verin:
| Yol | Ne zaman kullanılır? |
|---|---|
items |
Dizi, en üst düzey bir alandır: { "items": [ ... ] } |
data.orders |
İç içe geçmiştir: { "data": { "orders": [ ... ] } } |
$ |
Gövdenin kendisi bir dizidir: [ { ... }, { ... } ] |
| (boş) | Kapalı. İstek başına bir çalıştırma; varsayılan ayar budur. |
Her bir öğe, kendisi yük olarak kullanılan ayrı bir işlem haline gelir; bu nedenle eşleme yolları öğeye göredir: sku öğesini eşleyin, items.0.sku değil.
{
"items": [
{ "sku": "ABC-1", "qty": 2 },
{ "sku": "ABC-2", "qty": 1 },
{ "sku": "ABC-3", "qty": 7 }
]
}
// Split path: items
// Map fieldOne to: sku
// Map fieldTwo to: qty
// Response: { "runs": 3, "blocked": 0 }Kurallar ve sınırlar
- Her istek başına en fazla 100 öğe. Daha büyük bir parti reddedilir; böylece kontrolsüz bir gönderen iş akışınızı aşırı yükleyemez.
- Herhangi bir öğede eşleştirilmiş bir alan eksikse veya öğe Shopify Flow için çok büyükse, istek tamamen reddedilir ve hiçbir şey gönderilmez; hatalı öğenin konumu hata mesajında belirtilir. Bu sayede, bir toplu işin yarısı uygulanmış halde kalmak yerine, ya tamamen kabul edilir ya da tamamen reddedilir.
- Nesne değil, basit değerler olan öğeler
{ "value": ... }biçiminde gelir. - Bölme işlemi, senkron yanıtla birleştirilemez: Bir çağrıya birden fazla iş parçacığıyla yanıt verilemez. Bkz. Eşzamanlı yanıt.
- “Geçmiş” bölümünden geçmiş bir çalıştırmayı tekrar oynatmak, tüm grubu değil, yalnızca o tek öğeyi yeniden gönderir.
Tarih'te
Her öğe ayrı bir giriş oluşturur; böylece her birini ayrı ayrı görüntüleyebilir, yeniden deneyebilir ve tekrar oynatabilirsiniz.
