panorama.yaml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. openapi: 3.1.0
  2. info:
  3. title: Edison Next Panorama - Integration API
  4. description: |-
  5. API standard di integrazione di *Edison Next Panorama* con sistemi esterni
  6. version: 1.0.0
  7. #servers:
  8. # - url: https://api.panorama.edisonnext.it/api/v1
  9. # description: Main (production) API server
  10. # - url: <Here staging API server>
  11. # description: Staging API server
  12. # - url: <Here development API server>
  13. # description: Development API server
  14. tags:
  15. - name: Type
  16. description: operations to query data catalog and data types
  17. - name: Entity
  18. description: operations to manage entities
  19. - name: Device
  20. description: Operations about Devices
  21. paths:
  22. /type:
  23. get:
  24. summary: Restituisce i Tipi di Entità definiti
  25. tags: [Type]
  26. operationId: getTypes
  27. responses:
  28. '200':
  29. description: successful operation
  30. content:
  31. application/json:
  32. schema:
  33. type: array
  34. items:
  35. $ref: '#/components/schemas/Type'
  36. /catalog:
  37. get:
  38. summary: Restituisce i Cataloghi disponibili
  39. tags: [Type]
  40. operationId: getCatalogs
  41. parameters:
  42. - name: sources
  43. in: query
  44. description: Sources to filter by
  45. required: false
  46. explode: true
  47. schema:
  48. type: array
  49. items:
  50. type: string
  51. responses:
  52. '200':
  53. description: successful operation
  54. content:
  55. application/json:
  56. schema:
  57. type: array
  58. items:
  59. $ref: '#/components/schemas/Catalog'
  60. /terminology:
  61. get:
  62. summary: Restituisce le Nomenclature definite
  63. tags: [Type]
  64. operationId: getTerminologies
  65. responses:
  66. '200':
  67. description: successful operation
  68. content:
  69. application/json:
  70. schema:
  71. type: array
  72. items:
  73. $ref: '#/components/schemas/Terminology'
  74. /entity:
  75. get:
  76. summary: Elenco di tutte le entità
  77. tags: [Entity]
  78. responses:
  79. '200':
  80. description: Lista di entità
  81. content:
  82. application/json:
  83. schema:
  84. type: array
  85. items:
  86. $ref: '#/components/schemas/Entity'
  87. post:
  88. summary: Crea una nuova entità
  89. tags: [Entity]
  90. requestBody:
  91. required: true
  92. content:
  93. application/json:
  94. schema:
  95. $ref: '#/components/schemas/Entity'
  96. responses:
  97. '201':
  98. description: Entità creata
  99. /entity/{id}:
  100. get:
  101. summary: Ottiene una singola entità
  102. tags: [Entity]
  103. parameters:
  104. - in: path
  105. name: id
  106. required: true
  107. schema:
  108. type: string
  109. responses:
  110. '200':
  111. description: Entità trovata
  112. content:
  113. application/json:
  114. schema:
  115. $ref: '#/components/schemas/Entity'
  116. '404':
  117. description: Entità non trovata
  118. put:
  119. summary: Modifica un'entità esistente (escluso lo stato)
  120. tags: [Entity]
  121. parameters:
  122. - in: path
  123. name: id
  124. required: true
  125. schema:
  126. type: string
  127. requestBody:
  128. required: true
  129. content:
  130. application/json:
  131. schema:
  132. $ref: '#/components/schemas/Entity'
  133. responses:
  134. '200':
  135. description: Entità aggiornata
  136. delete:
  137. summary: Elimina un'entità
  138. tags: [Entity]
  139. parameters:
  140. - in: path
  141. name: id
  142. required: true
  143. schema:
  144. type: string
  145. responses:
  146. '204':
  147. description: Entità eliminata
  148. /state/{id}:
  149. put:
  150. summary: Modifica lo stato di un'Entità
  151. tags: [Entity]
  152. parameters:
  153. - in: path
  154. name: id
  155. required: true
  156. schema:
  157. type: string
  158. requestBody:
  159. required: true
  160. content:
  161. application/json:
  162. schema:
  163. type: string
  164. responses:
  165. '200':
  166. description: Stato Entità aggiornato
  167. /history/{id}:
  168. get:
  169. summary: Ottiene la storia delle variazioni di stato di un'Entità
  170. tags: [Entity]
  171. parameters:
  172. - in: path
  173. name: id
  174. description: l'ID dell'entità di cui ottenere la storia
  175. required: true
  176. schema:
  177. type: string
  178. responses:
  179. '200':
  180. description: Entità trovata
  181. content:
  182. application/json:
  183. schema:
  184. type: array
  185. items:
  186. type: object
  187. properties:
  188. timestamp:
  189. type: string
  190. format: date-time
  191. state:
  192. type: string
  193. examples: ['off', '22°C']
  194. '404':
  195. description: Entità non trovata
  196. /device:
  197. get:
  198. summary: Elenco di tutti i dispositivi
  199. responses:
  200. '200':
  201. description: Lista di dispositivi
  202. content:
  203. application/json:
  204. schema:
  205. type: array
  206. items:
  207. $ref: '#/components/schemas/Device'
  208. post:
  209. summary: Crea un nuovo dispositivo
  210. requestBody:
  211. required: true
  212. content:
  213. application/json:
  214. schema:
  215. $ref: '#/components/schemas/Device'
  216. responses:
  217. '201':
  218. description: Device creato
  219. /device/{id}:
  220. get:
  221. summary: Ottiene un singolo dispositivo
  222. parameters:
  223. - in: path
  224. name: id
  225. required: true
  226. schema:
  227. type: string
  228. responses:
  229. '200':
  230. description: Dispositivo trovato
  231. content:
  232. application/json:
  233. schema:
  234. $ref: '#/components/schemas/Device'
  235. '404':
  236. description: Dispositivo non trovato
  237. put:
  238. summary: Modifica un dispositivo esistente
  239. parameters:
  240. - in: path
  241. name: id
  242. required: true
  243. schema:
  244. type: string
  245. requestBody:
  246. required: true
  247. content:
  248. application/json:
  249. schema:
  250. $ref: '#/components/schemas/Device'
  251. responses:
  252. '200':
  253. description: Dispositivo aggiornato
  254. delete:
  255. summary: Elimina un dispositivo
  256. parameters:
  257. - in: path
  258. name: id
  259. required: true
  260. schema:
  261. type: string
  262. responses:
  263. '204':
  264. description: Dispositivo eliminato
  265. /login:
  266. post:
  267. summary: Login utente
  268. requestBody:
  269. required: true
  270. content:
  271. application/json:
  272. schema:
  273. type: object
  274. required: [username, password]
  275. properties:
  276. username:
  277. type: string
  278. password:
  279. type: string
  280. responses:
  281. '200':
  282. description: Login riuscito
  283. content:
  284. application/json:
  285. schema:
  286. type: object
  287. properties:
  288. token:
  289. type: string
  290. '401':
  291. description: Credenziali non valide
  292. components:
  293. schemas:
  294. Terminology:
  295. type: object
  296. description: Nomenclatura di riferimento per i Tipi di Entità. Può essere interna o esterna (schema.gov.it, UCUM, Google Knowledge Graph)
  297. required: [id, name, syntax]
  298. properties:
  299. id:
  300. type: string
  301. format: uri
  302. description: Identificativo univoco della Nomenclatura (terminology)
  303. name:
  304. type: string
  305. description: Nome canonico della Nomenclatura
  306. description:
  307. type: string
  308. description: Descrizione della Nomenclatura
  309. documentation:
  310. type: string
  311. format: uri
  312. description: Link alla documentazione della Nomenclatura
  313. examples:
  314. - 'https://schema.gov.it/'
  315. uri:
  316. type: string
  317. format: uri
  318. description: URI autoritativa della Nomenclatura
  319. examples:
  320. - http://dati.beniculturali.it/cis
  321. Type:
  322. type: object
  323. description: Tipi di entità, comprensivi di riferimento al nomenclatore e definizione della struttura del payload specifico
  324. required: [id, name, syntax]
  325. properties:
  326. id:
  327. type: string
  328. format: uri
  329. description: Identificativo univoco del Tipo di Entità
  330. name:
  331. type: string
  332. description: Nome canonico del Tipo di Entità
  333. stateType:
  334. $ref: '#/components/schemas/Type'
  335. syntax:
  336. type: string
  337. format: json
  338. description: Definizione (JSON-LD) della sintassi del Tipo di Entità
  339. terminology:
  340. $ref: '#/components/schemas/Terminology'
  341. State:
  342. type: object
  343. description: Definisce una possibile rappresentazione della situazione attuale nel «divenire» delle Entità di un certo Tipo
  344. examples:
  345. - ElectronicDeviceState - Acceso o Spento
  346. - StatoSemaforo - Rosso, Giallo, Verde, Lampeggiante, Spento
  347. - TemperaturaAmbiente - la temperatura attuale di un ambiente in gradi centigradi
  348. properties:
  349. id:
  350. type: string
  351. format: uri
  352. description: ID univoco del Tipo di Stato
  353. name:
  354. type: string
  355. description: Nome canonico del Tipo di Stato
  356. kind:
  357. type: string
  358. description: La tipologia elementare del Tipo di Stato (grandezza con unità di misura, stringa, eccetera)
  359. Entity:
  360. type: object
  361. description: rappresenta un generico oggetto urbano, è di uno specifico tipo, afferisce a un catalogo, ha uno stato dinamico, è dotato di proprietà type-specific, è tipicamente geo-localizzabile
  362. required: [id, type, state, createdDate, updatedDate]
  363. properties:
  364. id:
  365. type: string
  366. format: uri
  367. description: URI univoco dell’Entità sulla piattaforma
  368. type:
  369. $ref: '#/components/schemas/Type'
  370. parent:
  371. $ref: '#/components/schemas/Entity'
  372. externalId:
  373. type: string
  374. description: Identificativo dell’Entità nel sistema sorgente
  375. state:
  376. type: object
  377. description: Stato dell’entità
  378. properties:
  379. value:
  380. type: string
  381. description: Valore dello stato (determinato da Type.stateType)
  382. timestamp:
  383. type: string
  384. format: date-time
  385. description: Data/ora dello stato
  386. validity:
  387. type: object
  388. properties:
  389. from:
  390. type: string
  391. format: date-time
  392. description: Inizio validità
  393. to:
  394. type: string
  395. format: date-time
  396. description: Fine validità
  397. payload:
  398. type: object
  399. description: Attributi personalizzati in base al tipo di entità
  400. additionalProperties: true
  401. deviceId:
  402. description: Device associato all'entità
  403. $ref: '#/components/schemas/Device'
  404. createdDate:
  405. type: string
  406. format: date-time
  407. description: Data e ora di creazione dell'entità (timestamp ISO 8601)
  408. updatedDate:
  409. type: string
  410. format: date-time
  411. description: Data e ora dell’ultima modifica all'entità, escluse le modifiche di stato (timestamp ISO 8601)
  412. Source:
  413. type: object
  414. description: Fonte dati, interna o esterna, relativa a un soggetto alimentante
  415. properties:
  416. id:
  417. type: string
  418. format: uri
  419. description: ID univoco della Fonte Dati
  420. name:
  421. type: string
  422. description: Nome canonico della Fonte Dati
  423. organization:
  424. type: string
  425. description: Organizzazione di riferimento (ovvero soggetto alimentante) per la Fonte Dati
  426. required: [id, name, organization]
  427. Catalog:
  428. type: object
  429. description: Catalogo Dati (Data Catalog) fornito da una Fonte Dati
  430. properties:
  431. id:
  432. type: string
  433. format: uri
  434. description: ID univoco del Catalogo Dati
  435. name:
  436. type: string
  437. description: Nome canonico del Catalogo Dati
  438. source:
  439. description: Fonte Dati di afferenza
  440. $ref: '#/components/schemas/Source'
  441. required: [id, name, source]
  442. Device:
  443. type: object
  444. description: Dispositivo IoT gestito nativamente in piattaforma
  445. required: [id, fk_firmware_id, fk_tenant_code, fk_device_service_id, created_date, updated_date]
  446. properties:
  447. id:
  448. type: string
  449. format: uri
  450. description: Identificativo univoco del dispositivo
  451. serial:
  452. type: string
  453. description: Seriale del dispositivo
  454. fk_firmware_id:
  455. type: string
  456. format: uri
  457. description: Identificativo univoco del firmware del dispositivo
  458. fk_tenant_code:
  459. type: string
  460. format: uri
  461. description: Identificativo univoco del tenant appartenente il dispositivo
  462. fk_device_service_id:
  463. type: string
  464. format: uri
  465. description: Identificativo univoco del servizio
  466. decrypt_key:
  467. type: string
  468. description: Chiave di decrypting del dispositivo
  469. auth_key:
  470. type: string
  471. description: Chiave di authentication del dispositivo
  472. logical_device_name:
  473. type: string
  474. description: Logical device name del dispositivo
  475. mac_address:
  476. type: string
  477. description: Mac address del dispositivo
  478. createdDate:
  479. type: string
  480. format: date-time
  481. description: Data di creazione
  482. updatedDate:
  483. type: string
  484. format: date-time
  485. description: Ultimo aggiornamento