Azure Logic Apps'te içerik türlerini işleme
Şunlar için geçerlidir: Azure Logic Apps (Tüketim + Standart)
JSON, XML, düz dosyalar ve ikili veriler gibi çeşitli içerik türleri bir mantıksal uygulama üzerinden akabilir. Logic Apps tüm içerik türlerini desteklese de, bazıları yerel desteğe sahiptir ve mantıksal uygulamalarınızda tür değiştirme veya dönüştürme gerektirmez. Diğer türler gerektiğinde tür değiştirme veya dönüştürme gerektirebilir. Bu makalede Logic Apps'in içerik türlerini nasıl işlediği ve gerektiğinde bu türleri doğru şekilde nasıl oluşturabileceğiniz veya dönüştürebileceğiniz açıklanır.
logic apps Content-Type
, içerik türlerini işlemek için uygun yolu belirlemek için HTTP çağrılarındaki üst bilgi değerini kullanır, örneğin:
- application/json (yerel tür)
- metin/düz (yerel tür)
- application/xml and application/octet-stream
- Diğer içerik türleri
uygulama/json
Logic Apps , application/json içerik türündeki tüm istekleri JavaScript Gösterimi (JSON) nesnesi olarak depolar ve işler.
Varsayılan olarak, JSON içeriğini herhangi bir tür dönüştürme olmadan ayrıştırabilirsiniz.
Üst bilgisi "application/json" içerik türüne sahip bir isteği ayrıştırmak için bir ifade kullanabilirsiniz. Bu örnek dizideki animal-type
değeri dog
dönüştürmeden döndürür:
@body('myAction')['animal-type'][0]
{
"client": {
"name": "Fido",
"animal-type": [ "dog", "cat", "rabbit", "snake" ]
}
}
Üst bilgi belirtmeyen JSON verileriyle çalışıyorsanız, json() işlevini kullanarak bu verileri el ile JSON'a dönüştürebilirsiniz, örneğin:
@json(triggerBody())['animal-type']
JSON özellikleri için belirteç oluşturma
Logic Apps, mantıksal uygulamanızın iş akışında bu özelliklere daha kolay başvurabilmeniz ve kullanabilmeniz için JSON içeriğindeki özellikleri temsil eden kolay belirteçler oluşturmanızı sağlar.
İstek tetikleyicisi
Bu tetikleyiciyi Logic App Tasarım Aracı kullandığınızda, almayı beklediğiniz yükü açıklayan bir JSON şeması sağlayabilirsiniz. Tasarımcı bu şemayı kullanarak JSON içeriğini ayrıştırıyor ve JSON içeriğinizdeki özellikleri temsil eden kullanıcı dostu belirteçler oluşturuyor. Daha sonra mantıksal uygulamanızın iş akışı boyunca bu özelliklere kolayca başvurabilir ve kullanabilirsiniz.
Şemanız yoksa, şemayı oluşturabilirsiniz.
İstek tetikleyicisinde Şema oluşturmak için örnek yükü kullan'ı seçin.
Örnek bir JSON yükü girin veya yapıştırın altında örnek bir yük sağlayın ve Bitti'yi seçin. Örnek:
Oluşturulan şema artık tetikleyicinizde görünür.
Kod görünümü düzenleyicisinde İstek tetikleyicinizin temel tanımı aşağıdadır:
"triggers": { "manual": { "type": "Request", "kind": "Http", "inputs": { "schema": { "type": "object", "properties": { "client": { "type": "object", "properties": { "animal-type": { "type": "array", "items": { "type": "string" }, }, "name": { "type": "string" } } } } } } } }
İstemci uygulamanızın Azure Logic Apps'e gönderdiği HTTP isteğinde Content-Type adlı bir üst bilgi eklediğinizden emin olun ve üst bilginin değerini application/json olarak ayarlayın.
JSON ayrıştır eylemi
Mantıksal Uygulama Tasarım Aracı bu eylemi kullandığınızda, JSON çıktısını ayrıştırabilir ve JSON içeriğinizdeki özellikleri temsil eden kullanıcı dostu belirteçler oluşturabilirsiniz. Daha sonra mantıksal uygulamanızın iş akışı boyunca bu özelliklere kolayca başvurabilir ve kullanabilirsiniz. İstek tetikleyicisine benzer şekilde, ayrıştırmak istediğiniz JSON içeriğini açıklayan bir JSON şeması sağlayabilir veya oluşturabilirsiniz. Bu şekilde, Azure Service Bus, Azure Cosmos DB vb. verileri daha kolay kullanabilirsiniz.
metin/düz
Mantıksal uygulamanız üst bilgisi olarak ayarlanmış text/plain
HTTP iletileri Content-Type
aldığında mantıksal uygulamanız bu iletileri ham biçimde depolar.
Bu iletileri atama olmadan sonraki eylemlere eklerseniz, istekler üst bilgi olarak ayarlanmış şekilde Content-Type
text/plain
dışarı gider.
Örneğin, düz bir dosyayla çalışırken üst bilgi içerik türü olarak text/plain
ayarlanmış bir HTTP isteği Content-Type
alabilirsiniz:
Date,Name,Address
Oct-1,Frank,123 Ave
Daha sonra bu isteği sonraki bir eylemde başka bir isteğin gövdesi olarak gönderirseniz (örneğin, @body('flatfile')
) bu ikinci isteğin de olarak ayarlanmış text/plain
bir Content-Type
üst bilgisi vardır. Düz metin olan ancak üst bilgi belirtmemiş verilerle çalışıyorsanız, bu ifade gibi string() işlevini kullanarak bu verileri el ile metne dönüştürebilirsiniz:
@string(triggerBody())
application/xml and application/octet-stream
Logic Apps, alınan HTTP isteğinde veya yanıtında her zaman öğesini Content-Type
korur.
Bu nedenle mantıksal uygulamanız olarak ayarlanmış application/octet-stream
içeriği Content-Type
alırsa ve bu içeriği daha sonraki bir eyleme dönüştürmeden eklerseniz, giden istek de Content-Type
olarak application/octet-stream
ayarlanır.
Bu şekilde Logic Apps, iş akışında ilerlerken verilerin kaybolmayabileceğini garanti edebilir.
Ancak, eylem durumu veya girişler ve çıkışlar, durum iş akışında ilerlerken bir JSON nesnesinde depolanır.
Dönüştürücü işlevleri
Bazı veri türlerini korumak için Logic Apps, içeriği hem yükü $content-type
hem de $content
otomatik olarak dönüştürülen öğesini koruyan uygun meta verilere sahip ikili base64 kodlu bir dizeye dönüştürür.
Bu listede, bu işlevleri kullandığınızda Logic Apps'in içeriği nasıl dönüştürdüğü açıklanır:
json()
: Verileriapplication/json
xml()
: Verileriapplication/xml
binary()
: Verileriapplication/octet-stream
string()
: Verileritext/plain
base64()
: İçeriği base64 ile kodlanmış bir dizeye dönüştürürbase64toString()
: Base64 ile kodlanmış bir dizeyitext/plain
base64toBinary()
: Base64 ile kodlanmış bir dizeyiapplication/octet-stream
dataUri()
: Bir dizeyi veri URI'sine dönüştürürdataUriToBinary()
: Veri URI'sini ikili dizeye dönüştürürdataUriToString()
: Veri URI'sini dizeye dönüştürür
Örneğin, şu içerik gibi olarak ayarlanmış application/xml
bir HTTP isteği Content-Type
alırsanız:
<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>
ve işlevleriyle xml()
triggerBody()
ifadesini kullanarak @xml(triggerBody())
bu içeriği yayınlayabilir ve daha sonra bu içeriği kullanabilirsiniz. öte yandan @xpath(xml(triggerBody()), '/CustomerName')
ve işlevleriyle xpath()
xml()
de ifadeyi kullanabilirsiniz.
Diğer içerik türleri
Logic Apps ile çalışır ve diğer içerik türlerini destekler, ancak değişkenin kodunu çözerek $content
ileti gövdesini el ile almanızı gerektirebilir.
Örneğin, mantıksal uygulamanızın içerik türüne application/x-www-url-formencoded
sahip bir istek tarafından tetikleneceğini varsayalım.
Tüm verileri korumak için istek gövdesindeki değişkenin $content
base64 dizesi olarak kodlanmış bir yükü vardır:
CustomerName=Frank&Address=123+Avenue
İstek düz metin veya JSON olmadığından, istek eylemde aşağıdaki gibi depolanır:
"body": {
"$content-type": "application/x-www-url-formencoded",
"$content": "AAB1241BACDFA=="
}
Logic Apps, form verilerini işlemek için yerel işlevler sağlar, örneğin:
Veya bu örnekte olduğu gibi bir ifade kullanarak verilere el ile erişebilirsiniz:
@string(body('formdataAction'))
Giden isteğin aynı application/x-www-url-formencoded
içerik türü üst bilgisine sahip olmasını istiyorsanız, gibi @body('formdataAction')
bir ifade kullanarak herhangi bir atama yapmadan isteği eylemin gövdesine ekleyebilirsiniz.
Ancak, bu yöntem yalnızca gövde girişteki tek parametre body
olduğunda çalışır. İfadeyi @body('formdataAction')
bir application/json
istekte kullanmayı denerseniz, gövde kodlanmış olarak gönderildiğinden bir çalışma zamanı hatası alırsınız.