Questa è una vecchia versione del documento!
Questa api potrà essere pubblicata a qualsiasi url, sarà richiamabile in GET e fornirà al client le seguenti informazioni:
Fornirà al cliente informazioni per identificare il microservizio quali:
le stesse potranno essere estese in futuro per fornire funzioni di aggregazione/abilitazione automatica, quali, ad esempio: icona, colore, scope (gruppo, capability o progetto).
Esempio:
{“code”:“pim”,“name”:{“it”:“Gestione delle informazioni dei prodotti”,“en”:“Product Information Management”}}
o (di seguito: ogni “nome mnemonico” potrà essere rappresentato come stringa o come oggetto che includa un set di codici di locale (1+) con la stringa equivalente, i codici di locale saranno delle stringhe di 2 caratteri, e rappresenteranno il Set 1 dello standard ISO 639 (ISO639) (Language Codes), quindi limitativi alla rappresentazione di una lingua più che di una cultura o provenienza geografica, la cui inclusione sarà oggetto di valutazioni successive)
{“code”:“pim”,“name”:“Product Information Management”}
Fornirà al client informazioni utili per utilizzare correttamente per le api quali:
Le stesse potranno essere estese da configurazioni specifiche per microservizio (ad esempio: dimensione massima di un chunk di upload )
Il client non potrà fare assunzioni sul valore delle stesse che sarà oggetto di tuning microservizio per microservizio (ad esempio un microservizio potrà consentire di caricare 1000 oggetti per volta, un altro solo di 10 per ragioni tecniche/di performance/di sicurezza)
Ogni campo sarà rappresentato dalle seguenti proprietà:
uuid: “code di un oggetto”: il backend provvederà a pescare l'oggetto del modello relazionato con quel campo code, e valorizzare il campo con il suo descrittore
nota: se l oggetto relazionato dovesse essere residente su un altro microservizio può essere cachato localmente fino al riavvio del microservizio
date, datetime: “now”: il backend provvedere a calcolare la data, o la data e ora attuali e a valorizzare il campo
non è possibile impostarla per campi “langtext”,“langlongtext” e “uuid[]”
Per valori di default più avanzati occorrerà implementare un event handler nel backend.
L'informazione sul valore di default non potrà mai essere utilizzata da un client (e potrebbe anche essere nascosta allo stesso).
Nota bene: il valore di default non è da intendersi come un'imposizione sulla creazione dell'oggetto, in quanto tale il suo valore può essere variato client-side, per “forzare” il suo valore occorrerà lavorare con un event-handler, in tal senso non è prevista una valorizzazione di default per i campi di sicurezza (es: utente creatore), che saranno forzati e valorizzati con altri metodi.
Queste proprietà saranno affiancate da altre in future revisioni di questa specifica per accomodare la ricerca full-text (ad esempio il peso, e la ricercabilità).
Esempio:
{
"brand":{"name":{"it":"Produttore","en":"Manufacturer"},"type":"uuid","model":"brand"},
"name":{"name":"Nome","type":"text","required":true,"search":true,"sort":true,"autocomplete":true,"unique":true},
"owner":{"name":{"it":"Utente Proprietario","en":"Owner User"},"type":"uuid","model":"user","origin":"https://sso.neosidea.com/api/Manifest.json"
},
"year":{"name":"Anno","type":"integer","min":1945}
}
Per consentire all’UI di autogenerare i campi in una maniera organizzata verrà fornita una sezione, detta “ui” di suggerimenti così organizzata:
L’utilizzo delle stesse è facoltativo, e la gestione di informazioni incoerenti o mancanti è lasciata alla ui (ad es: campi doppi, campi mancanti). Esempio: “ui”:[
{
“name”:”Informazioni Principali”,
“format”:12,
“fields”:[
{“field”:”brand”},
{“field”:”name”},
]
},
{
“name”:”Informazioni Aggiuntive”,
“format”:6,
“fields”:[
{“field”:”issinglevintage”},
{“field”:”year”},
]
}
]
il formato d'errore è un oggetto composto da: - codice errore (obbligatorio) - descrizione testuale errore - parametri errore Ad esempio: {“error”:{“code”:“F001”,“description”:“Il campo codice non è univoco”,“params”:[{“field”:“code”}]}} API Microservizi v1.0.2 API del microservizio Ogni api per accedere a un modello sarà descritta in termini di: - codice identificativo - nome mnemonico - verbo http (GET, POST, …) - url di accesso (assoluta rispetto alla root di dominio del manifest del microservizio o assoluta, quindi, se ad esempio abbiamo un manifest tipo https://pim.neosidea.com/api/Manifest.json, lo stesso potrà specificare url di accesso tipo: /api/product/create/ o https://pim.neosidea.com/api/product/create/ - parametri url: saranno descritti i parametri concatenabili dall'url di accesso in termini di codice identificativo, nome mnemonico, tipo (dal sottoinsieme: text/number/integer/positivenumber/positiveinteger/date/datetime/time/timerange/boolean/uuid ), e obbligatorierà, gli stessi dovranno essere passati codificati in USASCII e separati da un forward slash. - parametri: saranno descritte le chiavi utilizzabili in un oggetto json trasferibile nel contenuto delle chiamata, in aggiunta ai tipi sin qui visti occorre prevedere i tipi speciali: “array” e “object” che potranno essere utilizzati per trasferire vettori di oggetti, oggetti, oggetti di ricerca, oggetti di risposta, e il tipo “blob” per i trasferimento binary o opachi alla specifica. - response - capabilities richieste (oggetto contenente un array di capabilities in or organizzate per funzione) Esempio: “new”:{“name”:“Create new objects”,“method”:“GET”,“url”:“/api/product/create/”,“params”:[{“code”:“num”,“name”:“Nume ro”,“type”:“positiveinteger”,“required”:true}],“response”:“array”,“capabilities”:{}} In aggiunta alle chiamate standard la stessa potrà prevedere chiamate custom (es: changepassword). Il formato della risposta è sempre da intendersi in alternativa al formato d'errore. Tutte le risposte potranno essere validate verificando la nullità del JSONPath (JSONPath) $.error.code Per migliorare l'integrazione delle stesse sarebbe utile evidenziare nel manifest le capabilities necessarie per il possibile utilizzo di una api, di modo che la UI possa mostrare/nascondere le funzioni sulla base del permesso utente, questa funzione sarà aggiunta alla specifica in una futura revisione.