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”}
Inoltre nello stesso potrà essere presente una sezione “relations” che contenga i microservizi referenziati dallo stesso (in formato codice: manifesto)
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:
Ad esempio:
{“error”:{“code”:“F001”,“description”:“Il campo codice non è univoco”,“params”:[{“field”:“code”}]}}
Ogni api per accedere a un modello sarà descritta in termini di:
Esempio:
“new”:{“name”:“Create new objects”,“method”:“GET”,“url”:“/api/product/create/”,“params”:[{“code”:“num”,“name”:“Numero”,“type”:“positiveinteger”,“required”:true}],“response”:“array”,“capabilities”:{}}
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.