Regulile Vision App Maker lucrează cu JSON printr-un set de operatori și apelează API-uri HTTP prin plugin-ul RestClient. În interiorul regulii, JSON-ul este un obiect pe care regula îl construiește și îl interoghează. Devine text o singură dată, la graniță, când este trimis unui plugin.

Cum funcționează

Un schimb obișnuit cu un API extern are cinci pași.

  1. Construiești cererea cu JsonObject și JsonArray.
  2. O serializezi o singură dată cu JsonText.
  3. O trimiți prin plugin-ul RestClient.
  4. Parsezi răspunsul cu JsonParse.
  5. Citești valorile cu JsonValue sau JsonValues.

Tipurile se păstrează la ambele capete: numerele rămân numere, valorile boolean rămân boolean, iar null rămâne null. Escaparea ghilimelelor și a diacriticelor este făcută de serializator.

Operatori JSON

OperatorRezultatComportament
JsonObject(cheie, valoare, ...)Obiect JSONValorile pot fi scalari, entități, liste sau alte obiecte JSON. Null() scrie explicit null. La chei duplicate câștigă ultima.
JsonArray(valoare, ...)Array JSONFiecare operand devine un element. O listă pasată ca operand unic devine array imbricat.
JsonText(json, [indentat])Text JSONCompact implicit; cu true, formatat pentru loguri.
JsonParse(text)Obiect sau array interogabilText gol sau null returnează null. Rezultatul funcționează cu Len, Iterate, First și Index.
JsonValue(json, cale, [implicit])Valoare tipizatăAcceptă obiect sau text JSON. Returnează prima potrivire; valoarea implicită acoperă căile lipsă.
JsonValues(json, cale)Listă tipizatăReturnează toate potrivirile; listă goală dacă nu există potriviri.
ToJson(CustomType)Obiect sau arrayTransformă o valoare de tip custom type în JSON.

Căi

  • profile.age citește o proprietate.
  • roles[0] citește un element de array după index.
  • $[?(@.role=='UX Designer')].name filtrează un array de obiecte; @ este elementul curent, ca CurrentValue.

Rețete uzuale

  • Listă de entități în array JSON: Iterate construiește câte un JsonObject pentru fiecare element, iar JsonText serializează colecția ca array. Când numele membrilor coincid cu cheile API-ului, ajunge JsonText(ToJson(Lista)).
  • Căutarea unui element după o proprietate: First cu o condiție JsonValue(CurrentValue, ...) se potrivește valorilor care vin dintr-un parametru. Pentru interogări fixe, filtrul JSONPath este mai compact.

Plugin-ul RestClient

RestClient este un client HTTP generic, cu autorizare integrată. Suportă orice verb HTTP și orice tip de conținut. Returnează răspunsul brut; un status 404 sau 500 nu aruncă excepție, iar regula decide ce face.

Apelarea

Plugin-ul primește HttpRequest(url, metodă, [corp], [content type], [headere], [autorizare], [timeout]). O regulă îl apelează cu CallPluginWithParams și transmite headerele și autorizarea ca text JSON. Ieșirile se citesc după index:

IeșireConținut
#0Codul de status HTTP (200, 404...)
#1Corpul răspunsului, ca text
#2Headerele răspunsului, ca JSON
#3Indicator de succes, true pentru statusurile 2xx

De obicei regula verifică #0, apoi citește corpul cu JsonValue(JsonParse(#1), ...). Pentru un status neașteptat se poate opri cu Throw și un mesaj formatat.

Corpul cererii după content type

Content typeCorp
application/json (implicit)Text JSON
application/x-www-form-urlencodedUn obiect cu câmpurile formularului; codarea URL o face plugin-ul
multipart/form-dataUn obiect cu fields și files; conținutul fișierelor în Base64, obținut cu FileToBase64

Autorizare

Autorizarea este un obiect JSON cu câmpul type:

  • basic, cu nume de utilizator și parolă;
  • bearer, cu un token;
  • apikey, cu numele headerului și valoarea lui.

Pentru alte scheme, regula setează direct headerul Authorization prin parametrul de headere.

RestClient și MakeHttpCall

MakeHttpCall, un plugin System, trimite URL, metodă, corp JSON și headere și returnează răspunsul. RestClient adaugă:

  • Content-Type corect pentru fiecare tip de corp;
  • trimiterea de formulare și fișiere;
  • codul de status și headerele răspunsului ca ieșiri;
  • timeout pe fiecare apel.