Hola a tots! Avui volem presentar al públic informàtic el nostre producte: un IDE per treballar amb API . Potser alguns de vosaltres ja sabeu de nosaltres . Tanmateix, no s'ha fet una revisió exhaustiva de l'eina, per la qual cosa abordem aquesta desafortunada deficiència.

RњRѕS, ReRІR ° C † ReSЏ
M'agradaria començar per com, de fet, vam arribar a aquesta vida i vam decidir crear la nostra pròpia eina per al treball avançat amb l'API. Comencem amb una llista de funcionalitats que hauria de tenir un producte, sobre les quals, segons la nostra opinió, podem dir que és un “IDE per treballar amb API”:
- Creació i execució de consultes i scripts (seqüències de consultes)
- Redacció de diferents tipus de proves
- Generació de proves
- Treballar amb descripcions d'API, inclosa la importació de formats com Swagger, OpenAPI, WADL, etc.
- Peticions burlesques
- Bon suport per a un o més idiomes per escriure scripts, inclosa la integració amb biblioteques populars
- etcètera
La llista es pot ampliar segons el vostre gust. A més, és important crear no només l'IDE en si, sinó també una determinada infraestructura, com ara sincronització al núvol, eines de línia d'ordres, servei de supervisió en línia, etc. Al final, les tendències dels darrers anys ens dicten no només la potent funcionalitat de l'aplicació, sinó també la seva agradable interfície.
Qui necessita una eina així? Òbviament, tots aquells que almenys estan connectats d'alguna manera amb el desenvolupament i les proves d'API són desenvolupadors i provadors =). A més, si per als primers sovint n'hi ha prou amb executar consultes individuals i scripts senzills, per als provadors aquesta és una de les eines principals, que, entre altres coses, hauria d'incloure un mecanisme potent per escriure proves amb la possibilitat d'executar-les en CI.
Així, seguint aquestes directrius, vam començar a crear el nostre producte. A veure què hem aconseguit en aquesta etapa.
Inici ràpid
Comencem amb un primer coneixement de l'aplicació. Podeu descarregar-lo Actualment, les 3 plataformes principals són compatibles: Windows, Linux, MacOS. Baixeu-lo, instal·leu-lo i inicieu-lo. Quan l'inicieu per primera vegada, és possible que vegeu la finestra següent:

Feu clic al signe més a la part superior de l'àrea de contingut per crear la vostra primera sol·licitud. La pestanya de consulta té aquest aspecte:

Vegem-ho amb més detall. La interfície de sol·licitud és molt semblant a la interfície dels clients de descans populars, cosa que facilita la migració des d'eines similars. Fem la primera sol·licitud a l'URL

En general, a primera vista, el panell de respostes tampoc no ofereix sorpreses. Tanmateix, m'agradaria cridar la vostra atenció sobre alguns punts:
- El cos de la resposta es representa en forma d'arbre, que en primer lloc afegeix contingut d'informació i, en segon lloc, us permet afegir algunes característiques interessants sobre les quals a continuació
- Hi ha una pestanya Assertions, que mostra una llista de proves per a una sol·licitud determinada
Com podeu veure, la nostra eina es pot utilitzar com a client de descans convenient. No obstant això, no estaríem aquí si les seves capacitats es limitessin només a enviar sol·licituds. A continuació, descriuré els conceptes bàsics i la funcionalitat de TestMace.
Conceptes i característiques bàsiques
Node
La funcionalitat de TestMace es divideix en diferents tipus de nodes. A l'exemple anterior, vam demostrar el funcionament del node RequestStep. Tanmateix, ara també estan disponibles a l'aplicació els següents tipus de nodes:
- Sol·licitudPas. Aquest és el node a través del qual podeu crear una sol·licitud. Només pot tenir un node Assertion com a element fill.
- Afirmació. El node s'utilitza per escriure proves. Només pot ser un node fill del node RequestStep.
- Carpeta. Us permet agrupar els nodes Folder i RequestStep dins d'ells mateixos.
- Projecte. Aquest és el node arrel, creat automàticament quan es crea el projecte. En cas contrari, repeteix la funcionalitat del node Carpeta.
- Enllaç. Enllaç al node Folder o RequestStep. Us permet reutilitzar consultes i scripts.
- etcètera
Els nodes es troben a les ratllades (el tauler de la part inferior esquerra, que s'utilitza per crear ràpidament consultes "puntuals") i als projectes (el tauler de la part superior esquerra), sobre els quals ens detenem amb més detall.
Projecte
Quan inicieu l'aplicació, és possible que observeu una línia de projecte solitaria a la cantonada superior esquerra. Aquesta és l'arrel de l'arbre del projecte. Quan inicieu un projecte, es crea un projecte temporal, el camí al qual depèn del vostre sistema operatiu. En qualsevol moment podeu traslladar el projecte a un lloc que us convingui.
L'objectiu principal del projecte és la capacitat de desar desenvolupaments al sistema de fitxers i sincronitzar-los encara més mitjançant sistemes de control de versions, executar scripts en CI, revisar canvis, etc.
Variables
Les variables són un dels mecanismes clau d'una aplicació. Aquells de vosaltres que treballeu amb eines com TestMace potser ja teniu una idea de què estem parlant. Per tant, les variables són una manera d'emmagatzemar dades comunes i comunicar-se entre nodes. Un anàleg, per exemple, són les variables d'entorn a Postman o Insomni. Tanmateix, vam anar més enllà i vam desenvolupar el tema. A TestMace, les variables es poden establir a nivell de node. Cap. També hi ha un mecanisme per heretar variables dels avantpassats i sobreposar variables en descendents. A més, hi ha una sèrie de variables integrades, comencen els noms de les variables integrades $. Aquests són alguns d'ells:
$prevStep— enllaç a variables del node anterior$nextStep— enllaç a variables del següent node$parent- el mateix, però només per a l'avantpassat$response- resposta del servidor$env- variables d'entorn actuals$dynamicVar- variables dinàmiques creades durant l'execució de l'script o la consulta
$env - Es tracta essencialment de variables ordinàries a nivell de node del projecte, però el conjunt de variables d'entorn canvia en funció de l'entorn seleccionat.
S'accedeix a la variable mitjançant ${variable_name}
El valor d'una variable pot ser una altra variable, o fins i tot una expressió sencera. Per exemple, la variable url pot ser una expressió com
http://${host}:${port}/${endpoint}.
Per separat, val la pena assenyalar la possibilitat d'assignar variables durant l'execució de l'script. Per exemple, sovint és necessari desar les dades d'autorització (un testimoni o la capçalera sencera) que provenen del servidor després d'una sessió correcta. TestMace us permet desar aquestes dades en variables dinàmiques d'un dels avantpassats. Per tal d'evitar col·lisions amb variables "estàtiques" ja existents, les variables dinàmiques es col·loquen en un objecte separat. $dynamicVar.
Escenaris
Amb totes les funcions anteriors, podeu executar scripts de consulta sencers. Per exemple, crear una entitat -> consultar una entitat -> suprimir una entitat. En aquest cas, per exemple, podeu utilitzar el node Carpeta per agrupar diversos nodes RequestStep.
Autocompleció i ressaltat d'expressió
Per a un treball còmode amb variables (i no només) és necessari l'autocompleció. I, per descomptat, ressaltant el valor d'una expressió per facilitar i aclarir a què equival una determinada variable. Aquest és exactament el cas quan és millor veure una vegada que escoltar cent vegades:

Val la pena assenyalar que l'autocompleció no només s'implementa per a variables, sinó també, per exemple, per a capçaleres, valors de determinades capçaleres (per exemple, autocompleció per a la capçalera Content-Type), protocols i molt més. La llista s'actualitza constantment a mesura que l'aplicació creix.
Desfer/refer
Desfer/refer canvis és una cosa molt convenient, però per alguna raó no s'implementa a tot arreu (i les eines per treballar amb API no són una excepció). Però no som d'aquests!) Hem implementat desfer/refes al llarg de tot el projecte, que permet desfer no només editant un node concret, sinó també la seva creació, supressió, moviment, etc. Les operacions més crítiques requereixen confirmació.
Creació de proves
El node Assertion és l'encarregat de crear proves. Una de les característiques principals és la possibilitat de crear proves sense programar, utilitzant editors integrats.
Un node d'assercions consisteix en un conjunt d'assercions. Cada afirmació té el seu propi tipus, actualment hi ha diversos tipus d'afirmacions
Compara valors: simplement compara 2 valors. Hi ha diversos operadors de comparació: igual, no igual, major que, major que o igual a, menor que, menor que o igual a.
Conté valor: comprova l'aparició d'una subcadena en una cadena.
XPath: comprova que el selector en XML conté un valor determinat.
L'asserció de JavaScript és un script javascript arbitrari que retorna true en cas d'èxit i fals en cas de fallada.
Tinc en compte que només l'última requereix habilitats de programació per part de l'usuari, les altres 3 afirmacions es creen mitjançant una interfície gràfica. Aquí, per exemple, és com es veu el diàleg per crear una afirmació de valors de comparació:

La cirereta del pastís és la creació ràpida d'afirmacions a partir de les respostes, només cal que mireu-ho!

Tanmateix, aquestes afirmacions tenen limitacions òbvies, que és possible que vulgueu utilitzar una afirmació javascript per superar. I aquí TestMace també ofereix un entorn còmode amb autocompleció, ressaltat de sintaxi i fins i tot un analitzador estàtic.
Descripció de l'API
TestMace us permet no només utilitzar l'API, sinó també documentar-la. A més, la pròpia descripció també té una estructura jeràrquica i s'adapta orgànicament a la resta del projecte. A més, actualment és possible importar descripcions de l'API dels formats Swagger 2.0 / OpenAPI 3.0. La descripció en si no només té un pes mort, sinó que està estretament integrada amb la resta del projecte, en particular, està disponible l'emplenament automàtic d'URL, capçaleres HTTP, paràmetres de consulta, etc., i en el futur tenim previst afegir proves. per al compliment de la resposta amb la descripció de l'API.
Node compartit
Cas: us agradaria compartir una sol·licitud problemàtica o fins i tot un script sencer amb un company o simplement adjuntar-lo a un error. TestMace també cobreix aquest cas: l'aplicació us permet serialitzar qualsevol node i fins i tot un subarbre en una URL. Copieu i enganxeu i podeu transferir fàcilment la sol·licitud a una altra màquina o projecte.
Format d'emmagatzematge del projecte llegible per l'home
De moment, cada node s'emmagatzema en un fitxer separat amb l'extensió yml (com és el cas del node Assertion), o en una carpeta amb el nom del node i el fitxer index.yml.
Per exemple, aquest és el que sembla el fitxer de sol·licitud que hem fet a la revisió anterior:
index.yml
children: []
variables: {}
type: RequestStep
assignVariables: []
requestData:
request:
method: GET
url: 'https://next.json-generator.com/api/json/get/NJv-NT-U8'
headers: []
disabledInheritedHeaders: []
params: []
body:
type: Json
jsonBody: ''
xmlBody: ''
textBody: ''
formData: []
file: ''
formURLEncoded: []
strictSSL: Inherit
authData:
type: inherit
name: Scratch 1Com podeu veure, tot està molt clar. Si ho desitja, aquest format es pot editar fàcilment manualment.
La jerarquia de carpetes del sistema de fitxers repeteix completament la jerarquia de nodes del projecte. Per exemple, un script com:

Assigna el sistema de fitxers a l'estructura següent (només es mostra la jerarquia de carpetes, però l'essència és clara)

Això facilita el procés de revisió del projecte.
Importació de Postman
Després de llegir tot l'anterior, alguns usuaris voldran provar (no?) un producte nou o (què dimonis no és broma!) utilitzar-lo completament en el seu projecte. No obstant això, la migració es pot aturar per un gran nombre de desenvolupaments en el mateix carter. En aquests casos, TestMace admet la importació de col·leccions de Postman. De moment, s'admeten importacions sense proves, però no descartem suportar-les en el futur.
Plans
Espero que a molts dels que han llegit fins aquest moment els hagi agradat el nostre producte. Tanmateix, això no és tot! El treball en el producte està en ple apogeu i aquí teniu algunes característiques que tenim previst afegir aviat.
Sincronització al núvol
Una de les funcions més sol·licitades. De moment, proposem utilitzar sistemes de control de versions per a la sincronització, per la qual cosa estem fent més amigable el format per a aquest tipus d'emmagatzematge. No obstant això, aquest flux de treball no és adequat per a tothom, per la qual cosa tenim previst afegir un mecanisme de sincronització conegut per molts a través dels nostres servidors.
CLI
Com s'ha esmentat anteriorment, els productes a nivell IDE no poden prescindir de tot tipus d'integracions amb aplicacions o fluxos de treball existents. La CLI és exactament el que es necessita per integrar les proves escrites a TestMace en el procés d'integració contínua. El treball a la CLI està en ple desenvolupament, les primeres versions llançaran el projecte amb un informe de consola senzill. En el futur tenim previst afegir la sortida de l'informe en format JUnit.
Sistema de connectors
Malgrat tota la potència de la nostra eina, el conjunt de casos que requereixen solucions és il·limitat. Al cap i a la fi, hi ha tasques específiques d'un projecte concret. És per això que en el futur tenim previst afegir un SDK per desenvolupar connectors i cada desenvolupador podrà afegir funcionalitats al seu gust.
Ampliació de la gamma de tipus de nodes
Aquest conjunt de nodes no cobreix tots els casos requerits per l'usuari. Nodes que es preveu afegir:
- Node d'script: converteix i col·loca dades mitjançant js i l'API corresponent. Amb aquest tipus de nodes, podeu fer coses com ara scripts de sol·licitud prèvia i posterior a la sol·licitud a Postman.
- Node GraphQL - suport graphql
- Node d'assercions personalitzades: us permetrà ampliar el conjunt d'assercions existents al projecte
Naturalment, aquesta no és una llista definitiva, s'actualitzarà constantment a causa, entre altres coses, dels vostres comentaris.
FAQ
En què ets diferent de Postman?
- El concepte de nodes, que permet escalar gairebé sense fi la funcionalitat del projecte
- Format de projecte llegible per l'home amb desar-lo en un sistema de fitxers, cosa que simplifica el treball mitjançant sistemes de control de versions
- Capacitat de crear proves sense programació i suport js més avançat a l'editor de proves (compleció automàtica, analitzador estàtic)
- Autocompleció avançada i ressaltat del valor actual de les variables
És un producte de codi obert?
No, de moment les fonts estan tancades, però en un futur estem estudiant la possibilitat d'obrir les fonts
De què vius?)
Juntament amb la versió gratuïta, tenim previst llançar una versió de pagament del producte. Principalment inclourà coses que requereixen un costat del servidor, per exemple, la sincronització.
Conclusió
El nostre projecte avança a passos de gegant cap a un llançament estable. Tanmateix, el producte ja es pot utilitzar, i els comentaris positius dels nostres primers usuaris en són una prova. Recollim activament comentaris, perquè sense una estreta cooperació amb la comunitat és impossible construir una bona eina. Ens pots trobar aquí:
Esperem els vostres desitjos i suggeriments!
Font: www.habr.com
