---
title: Interfaccia di accesso unificata
section: Concepts
weight: 5
description: La REST API universale e il linguaggio di interrogazione che offrono alle applicazioni un unico modo standardizzato per accedere ai dati e alle funzioni del sistema.
related:
  - integration
  - architecture/abstract-data-layer
  - basic-modules/modules
  - data-representation/components
---

import Alert from '@/components/docs/Alert.astro';

## REST API universale

Il sistema implementa una REST API universale che garantisce un'interazione coerente tra sistemi, applicazioni e dispositivi diversi. Astrae i dettagli implementativi e offre un modo standardizzato per accedere ai dati e alle funzioni del sistema.

Il servizio REST API presenta le seguenti caratteristiche nella gestione dei dati:

- **Uniformità**: tutte le richieste e le risposte seguono lo stesso formato.
- **Scalabilità**: supporta un gran numero di dispositivi e utenti.
- **Sicurezza**: fornisce autenticazione, autorizzazione e cifratura dei dati.
- **Documentazione**: dispone di una documentazione chiara per gli sviluppatori.

Il servizio semplifica notevolmente il lavoro successivo con i dati:

- **Integrazione semplificata**: sistemi e dispositivi diversi possono interagire attraverso un'unica interfaccia.
- **Astrazione dall'hardware**: le applicazioni non dipendono da dispositivi o protocolli specifici.
- **Gestione centralizzata**: tutte le richieste di dati passano attraverso un unico punto di accesso.
- **Flessibilità**: è possibile aggiungere nuove funzionalità o modificare quelle esistenti con facilità.

<Alert type="note">
  Il servizio REST API è descritto in modo più dettagliato nella sezione [Riferimento
  API](/it/api/v1).
</Alert>

#### Esempio di richiesta a una REST API universale

Richiesta di dati:

```bash title="Request example"
GET /api/v1/channel_data?equipment_id=1&archive_type=daily&channel_id=3
```

Risposta:

```json title="Response example"
[
  {
    "id": 123,
    "equipment_id": 1,
    "seance_id": 2,
    "channel_id": 3,
    "archive_type_id": 4,
    "value": 42.5,
    "event_time": 1739950861
  }
]
```

### Vantaggi della REST API universale

Il servizio REST API è uno strumento potente che crea un'interfaccia di accesso ai dati unificata.

Consente di:

- Astrarre dai dispositivi e dalle tecnologie specifiche.
- Garantire coerenza e facilità d'uso.
- Semplificare l'integrazione di nuovi sistemi e dispositivi.

## Linguaggio di interrogazione

Basandosi su questa interfaccia di accesso ai dati unificata, il sistema utilizza un linguaggio di interrogazione affinché utenti e applicazioni possano interagire con il database per recuperare, modificare o gestire le informazioni. Un linguaggio di interrogazione universale garantisce coerenza, facilità d'uso e potenti capacità di manipolazione dei dati.

Il linguaggio di interrogazione offre le seguenti capacità:

- **Manipolazione dei dati semplificata**: gli utenti possono recuperare i dati senza scrivere codice complesso.
- **Standardizzazione**: un unico linguaggio per tutte le operazioni sui dati.
- **Flessibilità**: la possibilità di eseguire interrogazioni sia semplici sia complesse.
- **Integrazione**: si integra facilmente con sistemi e applicazioni diversi.

### Esempi di linguaggi di interrogazione utilizzati nel sistema

#### SQL (Structured Query Language)

Il _DBMS PostgreSQL_ utilizza il linguaggio di interrogazione _SQL_ per lavorare con i dati. Supporta le operazioni di base per la manipolazione dei dati.

Un esempio di interrogazione SQL per il recupero dei dati:

```sql title="example.sql"
SELECT id, channel_id, value
FROM channel_data
WHERE equipment_id = 1 AND archive_type_id = 4;
```

#### Interfaccia REST con parametri

La _REST API_ universale implementa un'interfaccia _REST_ con parametri come parte della sua interazione con i dati. Ciò consente all'_API_ di utilizzare i parametri di interrogazione per filtrare i dati.

Per esempio:

```bash title="Request example"
GET /api/v1/channel_data?equipment_id=1&channel_id=101
```

#### Active Record Query Interface

Il framework _Ruby on Rails_ implementa _Active Record (la Active Record Query Interface)_, che consente di interrogare i database senza utilizzare SQL.

Ecco un esempio di interrogazione _Active Record_ per il recupero dei dati:

```ruby title="Active record example"
ChannelDatum.where(equipment_id: 1, archive_type_id: 4)
```
