Introduzione ============ Premessa ^^^^^^^^ Per soddisfare l'esigenza di integrare il nuovo software di pre-sale "Odoo" al flusso applicativo e procedurale IPI con i suoi CRM, sono state esposte delle nuove interfacce di comunicazione operanti sui CRM. Obiettivo ^^^^^^^^^ Lo scopo del documento è quello di formalizzare il protocollo di comunicazione specificandone le fuzionalità Requisiti ========= La comunicazione tra il software di Odoo ed il software di IPI avverrà con chiamate HTTP Restful in Json. Per poter eseguire operazioni tramite queste interfacce, sarà necessario implementare l'autenticazione degli utenti commerciali, i quali saranno abilitate nelle operazioni di inserimento nuovi utenti/contratti/attrezzature/impianti/.. nati da nuovi ordini d'acquisto, divenuti poi contratti. Descrizione =========== IPI è una società che opera come certifiatore di prodotti e valutazione di conformità per impianti e attrezzature sotto la tutela delle direttive europee. Il presente software viene utilizzato da applicazioni terze (applicazioni mobile Android ed ERP Odoo) per poter interfacciarsi al software per gestione attività tecniche di IPI Architettura ============ Il presente software è sviluppato con la tecnologia NodeJS con il framework Loopback.io . Per poter funzionare correttamente è necessario node@^8, richiede Java versione 1.7. È necessaria la comunicazione con il backend PHP ed al database applicativo IPI. Installazione ^^^^^^^^^^^^^ Clonare il progetto da gitlab .. code-block:: bash export NODE_ENV=development git clone git@git.webmonks.org:ipi-mobile/server.git --branch $NODE_ENV dm1104_$NODE_ENV npm install cp ipi-mobile_$NODE_ENV/scripts/lib/* $JAVA_HOME/jre/lib/ Configurazione ^^^^^^^^^^^^^^ A runtime verrà caricato il file di configurazione :file:`./server/config.json` sovrascrivendo le chiavi specifiche per il relativo ambiente, presenti nel :file:`./server/config.{NODE_ENV}.json` Start up ^^^^^^^^ Lo script di startup dell'applicativo è :file:`./server/server.js`. Dalla directory applicativa è quindi necessario eseguire ``node server/server.js`` DM1104 ------- +------------+--------------------------------------------+-----------------------------------------------+ | | Prod | Preprod | +------------+--------------------------------------------+-----------------------------------------------+ | CRM | dm1104.ipiverifiche.com | dm1104-preprod.ipiverifiche.com | +------------+--------------------------------------------+-----------------------------------------------+ | Middleware | dm1104-prod.ipi.middleware.monksoftware.it | dm1104-preprod.ipi.middleware.monksoftware.it | +------------+--------------------------------------------+-----------------------------------------------+ DPR462 ------ +------------+--------------------------------------------+-----------------------------------------------+ | | Prod | Preprod | +------------+--------------------------------------------+-----------------------------------------------+ | CRM | dpr462.ipiverifiche.com | dpr462-preprod.ipiverifiche.com | +------------+--------------------------------------------+-----------------------------------------------+ | Middleware | dpr462-prod.ipi.middleware.monksoftware.it | dpr462-preprod.ipi.middleware.monksoftware.it | +------------+--------------------------------------------+-----------------------------------------------+ DPR162 ------ +------------+--------------------------------------------+-----------------------------------------------+ | | Prod | Preprod | +------------+--------------------------------------------+-----------------------------------------------+ | CRM | dpr162.ipiverifiche.com | dpr162-preprod.ipiverifiche.com | +------------+--------------------------------------------+-----------------------------------------------+ | Middleware | dpr162-prod.ipi.middleware.monksoftware.it | dpr162-preprod.ipi.middleware.monksoftware.it | +------------+--------------------------------------------+-----------------------------------------------+ Protocollo di comunicazione =========================== Struttura response ^^^^^^^^^^^^^^^^^^ Descrizione ----------- Ogni interfaccia HTTP richiede in input parametri ben definiti ed in output restituisce oggetti JSON. Struttura generica di risposta ------------------------------ .. code-block:: text { "status": , "errorCode": , "errorMessage": ErrorMessage, "response": } Descrizione response -------------------- +--------------+----------------------------------------+---------+ | Field Name | Descrizione | Type | +==============+========================================+=========+ | status | esito risposta: | integer | | | 0 → ok | | | | < 0 → error | | | | > 0 → warning | | +--------------+----------------------------------------+---------+ | errorCode | codice univoco dell’errore/warning | string | +--------------+----------------------------------------+---------+ | errorMessage | oggetto generico di descrizione errore | string | +--------------+----------------------------------------+---------+ | response | oggetto generico di risposta | string | +--------------+----------------------------------------+---------+ Access Token ^^^^^^^^^^^^ Descrizione ----------- Per le interfacce richiedenti autenticazione, si dovrà passare negli header della request il token restituito alla login ( `login.response.authorization.id` ). Esempio di chiamata con autenticazione -------------------------------------- Il token sarà da passare nell'header `Authorization` .. code-block:: text > GET /api/// HTTP/1.1 > User-Agent: curl/7.52.1 > Authorization: 0GEpkO8IqM3nwyebWydrEG8r89BuCOPE0CHCmHfLLPKCBbKxbqBHVVqdqW6xKgmV > Accept: application/json