Tartalomtípusok kezelése az Azure Logic Appsben
A következőkre vonatkozik: Azure Logic Apps (Használat + Standard)
A különböző tartalomtípusok áthaladhatnak egy logikai alkalmazásban, például JSON, XML, egybesimított fájlok és bináris adatok. Bár a Logic Apps minden tartalomtípust támogat, néhány natív támogatással rendelkezik, és nem igényel castingot vagy átalakítást a logikai alkalmazásokban. Más típusok szükség esetén castingot vagy átalakítást igényelhetnek. Ez a cikk azt ismerteti, hogyan kezeli a Logic Apps a tartalomtípusokat, és hogyan alakíthatja át megfelelően ezeket a típusokat, ha szükséges.
A tartalomtípusok kezelésének megfelelő módjának meghatározásához a Logic Apps a Content-Type
HTTP-hívások fejlécértékére támaszkodik, például:
- application/json (natív típus)
- text/plain (natív típus)
- application/xml és application/octet-stream
- Egyéb tartalomtípusok
application/json
A Logic Apps javascript notation (JSON) objektumként tárolja és kezeli az alkalmazás-/json-tartalomtípussal kapcsolatos kéréseket.
Alapértelmezés szerint a JSON-tartalmat casting nélkül is elemezheti.
Az "application/json" tartalomtípusú fejlécet tartalmazó kérések elemzéséhez használhat egy kifejezést. Ez a példa a tömb értékét dog
animal-type
adja vissza casting nélkül:
@body('myAction')['animal-type'][0]
{
"client": {
"name": "Fido",
"animal-type": [ "dog", "cat", "rabbit", "snake" ]
}
}
Ha olyan JSON-adatokkal dolgozik, amelyek nem határoznak meg fejlécet, manuálisan is átadhatja az adatokat a JSON-ba a json() függvénnyel, például:
@json(triggerBody())['animal-type']
Jogkivonatok létrehozása JSON-tulajdonságokhoz
A Logic Apps lehetővé teszi, hogy felhasználóbarát jogkivonatokat hozzon létre, amelyek a JSON-tartalom tulajdonságait képviselik, így könnyebben hivatkozhat és használhatja ezeket a tulajdonságokat a logikai alkalmazás munkafolyamatában.
Kérelem eseményindítója
Ha ezt az eseményindítót használja a Logikai alkalmazás Tervező, megadhat egy JSON-sémát, amely leírja a várt hasznos adatokat. A tervező ezzel a sémával elemzi a JSON-tartalmat, és felhasználóbarát jogkivonatokat hoz létre, amelyek a JSON-tartalom tulajdonságait képviselik. Ezután egyszerűen hivatkozhat és használhatja ezeket a tulajdonságokat a logikai alkalmazás munkafolyamatában.
Ha nem rendelkezik sémával, létrehozhatja a sémát.
A Kérelem eseményindítóban válassza a Minta hasznos adat használata séma létrehozásához lehetőséget.
Az Enter or paste a sample JSON payload (JSON-minta hasznos adat beírása vagy beillesztése) területen adjon meg egy hasznos adatmintát, majd válassza a Done (Kész) lehetőséget. Például:
A létrehozott séma ekkor megjelenik az eseményindítóban.
A kódnézet-szerkesztőben a Request eseményindító mögöttes definíciója a következő:
"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" } } } } } } } }
Az ügyfélalkalmazás által az Azure Logic Appsnek küldött HTTP-kérelemben győződjön meg arról, hogy tartalmaz egy Content-Type nevű fejlécet, és állítsa a fejléc értékét application/json értékre.
JSON-művelet elemzése
Ha ezt a műveletet a Logikai alkalmazás Tervező használja, elemezheti a JSON-kimenetet, és felhasználóbarát jogkivonatokat hozhat létre, amelyek a JSON-tartalom tulajdonságait képviselik. Ezután egyszerűen hivatkozhat és használhatja ezeket a tulajdonságokat a logikai alkalmazás munkafolyamatában. A Kérelem eseményindítóhoz hasonlóan megadhat vagy létrehozhat egy JSON-sémát, amely leírja az elemezni kívánt JSON-tartalmat. Így egyszerűbben használhatja fel a Azure Service Bus, az Azure Cosmos DB stb. adatait.
szöveg/egyszerű
Ha a logikai alkalmazás olyan HTTP-üzeneteket kap, amelyek Content-Type
fejléce értékre text/plain
van állítva, a logikai alkalmazás nyers formában tárolja ezeket az üzeneteket.
Ha ezeket az üzeneteket további műveletekbe is belefoglalja, és nem adja meg azokat, a kérések a fejlécben a Content-Type
következőre text/plain
vannak állítva: .
Ha például egy egybesimított fájllal dolgozik, előfordulhat, hogy egy HTTP-kérést kap, amelynek fejléce Content-Type
tartalomtípusra text/plain
van beállítva:
Date,Name,Address
Oct-1,Frank,123 Ave
Ha ezt a kérést egy későbbi műveletben egy másik kérés törzseként küldi el, @body('flatfile')
például a második kérésnek is van egy Content-Type
fejléce, amely a következőre text/plain
van állítva: . Ha egyszerű szöveges adatokkal dolgozik, de nem adott meg fejlécet, manuálisan is átadhatja az adatokat szöveggé a string() függvénnyel , például a következő kifejezéssel:
@string(triggerBody())
application/xml és application/octet-stream
A Logic Apps mindig megőrzi a Content-Type
kapott HTTP-kérésben vagy -válaszban.
Ha tehát a logikai alkalmazás a () értékre Content-Type
állított application/octet-stream
tartalmat fogadja, és ezt a tartalmat egy későbbi műveletben, casting nélkül is belefoglalja, a kimenő kérés is értékre application/octet-stream
van Content-Type
állítva.
Így a Logic Apps garantálhatja, hogy az adatok ne vesszenek el a munkafolyamatok között.
A műveletállapot, vagyis a bemenetek és kimenetek azonban egy JSON-objektumban vannak tárolva, miközben az állapot a munkafolyamaton halad át.
Konverterfüggvények
Bizonyos adattípusok megőrzése érdekében a Logic Apps bináris base64 kódolású sztringgé alakítja a tartalmat megfelelő metaadatokkal, amelyek megőrzik a $content
hasznos adatokat és a fájlt is, amelyeket a $content-type
rendszer automatikusan konvertál.
Ez a lista azt ismerteti, hogyan konvertálja a Logic Apps a tartalmat az alábbi függvények használatakor:
-
json()
: Az adatokat a következőre öntötte:application/json
-
xml()
: Az adatokat a következőre öntötte:application/xml
-
binary()
: Az adatokat a következőre öntötte:application/octet-stream
-
string()
: Az adatokat a következőre öntötte:text/plain
-
base64()
: A tartalmat base64 kódolású sztringgé alakítja -
base64toString()
: Alap64 kódolású sztringet konvertáltext/plain
-
base64toBinary()
: Alap64 kódolású sztringet konvertálapplication/octet-stream
-
dataUri()
: Egy sztringet adat URI-vá alakít át -
dataUriToBinary()
: Adat URI-t bináris sztringgé alakít át -
dataUriToString()
: Adat-URI-t sztringgé alakít át
Ha például http-kérést kap, ahol Content-Type
a application/xml
értéke , például ez a tartalom:
<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>
Ezt a tartalmat a @xml(triggerBody())
kifejezés és triggerBody()
függvényekkel xml()
való használatával vetítheti, majd később felhasználhatja ezt a tartalmat. Vagy használhatja a kifejezést a @xpath(xml(triggerBody()), '/CustomerName')
és xml()
a xpath()
függvényekkel.
Egyéb tartalomtípusok
A Logic Apps más tartalomtípusokkal is együttműködik, és támogatja azt, de előfordulhat, hogy manuálisan kell lekérni az üzenettörzset a $content
változó dekódolásával.
Tegyük fel például, hogy a logikai alkalmazást egy tartalomtípusú application/x-www-url-formencoded
kérés aktiválja.
Az összes adat megőrzése érdekében a $content
kérelem törzsében lévő változó hasznos adattal rendelkezik, amely base64 sztringként van kódolva:
CustomerName=Frank&Address=123+Avenue
Mivel a kérés nem egyszerű szöveg vagy JSON, a kérés a műveletben az alábbiak szerint lesz tárolva:
"body": {
"$content-type": "application/x-www-url-formencoded",
"$content": "AAB1241BACDFA=="
}
A Logic Apps natív függvényeket biztosít az űrlapadatok kezeléséhez, például:
Vagy manuálisan is hozzáférhet az adatokhoz az alábbi példához hasonló kifejezéssel:
@string(body('formdataAction'))
Ha azt szeretné, hogy a kimenő kérésnek ugyanaz application/x-www-url-formencoded
a tartalomtípus-fejléce legyen, a kérést a művelet törzséhez adhatja hozzá, anélkül, hogy a parancsot egy olyan kifejezéssel adja hozzá, mint a @body('formdataAction')
.
Ez a módszer azonban csak akkor működik, ha a törzs az egyetlen paraméter a body
bemenetben. Ha egy kérésben application/json
a kifejezést próbálja használni@body('formdataAction')
, futásidejű hibát kap, mert a rendszer kódolva küldi el a törzset.