Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 51 di 58
  • livello intermedio
Indice lezioni

MySQL e REST

Sfruttare l'architettura REST per esporre servizi di accesso ad un database MySQL tramite il plugin sperimentale MySQL HTTP Plugin.
Sfruttare l'architettura REST per esporre servizi di accesso ad un database MySQL tramite il plugin sperimentale MySQL HTTP Plugin.
Link copiato negli appunti

Dopo avere visto alcune delle tante possibilità di interfacciamento con MySQL attraverso l'uso di diversi linguaggi di programmazione, in questa lezione ci focalizzaremo su un paradigma sempre più diffuso: i servizi REST.

Per chi non lo sapesse, l'architettura REST si basa sulla fornitura di una serie di servizi basata sul protocollo HTTP. In altre parole, inviando comandi HTTP (come semplici richieste GET e POST) è possibile ricevere dati in un formato universale come JSON o XML. Il vantaggio dei servizi basati su questa architettura è quello di essere facilmente accessibili in maniera pressocchè indipendente dal linguaggio di programmazione usato: è infatti sufficiente utilizzare le librerie per lo scambio di dati HTTP e quelle per il processamento di dati in XML e JSON. Poichè queste librerie sono disponibili per tutti i maggiori linguaggi di programmazione, i servizi REST sono una soluzione valida per ogni sistema multipiattaforma.

Anche l'interfacciamento con MySQL può essere basato sull'esposizione di una serie di servizi REST. La generazione di tali servizi può essere effettuata in vari modi, e sfruttando vari linguaggi di programmazione server. In molti casi, comunque, esistono soluzioni che ci permettono di generare tali servizi in maniera automatica e trasparente. Di seguito vedremo come utilizzare un plugin rilasciato dal team di sviluppo di MySQL (sebbene ancora in fase sperimentale): il MySQL HTTP Plugin.

Download e installazione

MySQL HTTP Plugin può essere scaricato in una versione già precompilata per Linux (o come codice sorgente da compilare, nel caso volessimo lavorare su altri sistemi operativi) da MySQL Labs. L'installazione è ben documentata nella documentazione ufficiale, e segue pressocchè le stesse procedure di installazione valide per gli altri plugin di MySQL. In ogni caso, essa può essere riassunta in pochi semplici passi:

  1. creiamo preventivamente un utente SQL da utilizzare per il plugin, impostiamo la relativa password e assegniamo i permessi di lettura e scrittura;
  2. installiamo quindi il plugin:
    INSTALL PLUGIN myhttp SONAME 'libmyhttp.so'
  3. nel file my.cnf, impostiamo l'utente di default per il plugin appena installato, le autorizzazioni per HTTP, la porta di default, eccetera;
  4. riavviamo MySQL.

Per ogni ulteriore dettaglio, è consigliato ricorrere alla già citata documentazione ufficiale, scaricabile sempre da MySQL Labs.

Utilizzo di MySQL HTTP Plugin

Dopo l'installazione, vediamo come utilizzare, in pratica, i servizi REST offerti da MySQL HTTP Plugin. Esso ci fornirà tre interfacce di accesso al database. La prima permette di richiedere l'esecuzione di una query SQL passandola per intero come parametro della URL. Ad esempio, immaginiamo di volere ottenere il risultato della query seguente:

SELECT * FROM tabella ORDER BY id

Immaginando di lavorare in locale, e di avere richiesto al plugin di utilizzare la porta 8080, l'URL a cui accedere dovrebbe essere il seguente:

http://localhost:8080/sql//SELECT+%2A+FROM+tabella+ORDER+BY+id

Il risultato della richiesta HTTP (in questo caso è sufficiente una GET) sarà una risposta contenente un documento JSON simile al seguente:

[
   {
      "meta":[
         {
            "type":3,
            "catalog":"def",
            "database":"myhttp",
            "table":"simple",
            "org_table":"simple",
            "column":"id",
            "org_column":"id",
            "charset":63,
            "length":11,
            "flags":16899,
            "decimals":0
         },
         {
            "type":253,
            "catalog":"def",
            "database":"myhttp",
            "table":"simple",
            "org_table":"simple",
            "column":"col_a",
            "org_column":"col_a",
            "charset":33,
            "length":765,
            "flags":0,
            "decimals":0
         }
      ],
      "data":[
         [
            "1",
            "Hello"
         ],
         [
            "2",
            " "
         ],
         [
            "3",
            "world!"
         ]
      ],
      "status":[
         {
            "server_status":34,
            "warning_count":0
         }
      ]
   }
]

Analizzando rapidamente il contenuto, vediamo che la sezione meta contiene le informazioni su ognuna delle colonne dei risultati, mentre questi ultimi sono inclusi all'interno dell'array data. L'uso di un array piuttosto che di una struttura dati è giustificato dalla necessità di ridurre la banda richiesta per il trasferimento dei risultati.

MySQL HTTP Plugin offre anche la possibilità di effettuare tutte le altre operazioni CRUD. Per esempio, possiamo utilizzare un comando HTTP PUT per inserire (INSERT) o aggiornare (UPDATE) una riga di una tabella, semplicemente specificando la chiave primaria nella URL seguente:

http://localhost:8080/crud/myhttp/nome_tabella/chiave_primaria

È ovviamente necessario specificare un documento JSON come contenuto del corpo della richiesta. Immaginiamo, per esempio, di volere effettuare l'operazione di inserimento descritta dalla URL precedente. Per farlo, dovremo includere un documento JSON come il seguente:

{
   "colonna1": "valore 1",
   "colonna2": "valore 2",
   ...
   "colonnaN": "valore N",
}

Si noti che, in questo caso, non possiamo fare affidamento all'opzione AUTO_INCREMENT, dal momento che siamo obbligati a specificare una chiave primaria.

Questo plugin offre anche una terza opzione interessante. Fin qui, l'uso delle API REST è sempre stato basato sulla struttura del database, composto da tabelle e relazioni. Dal momento che gli oggetti JSON sono molto più flessibili, viene offerta anche la possibilità di memorizzare tali oggetti in formato testuale (ovvero come BLOB), rimuovendo il vincolo della strutturalità richiesta dai database relazionali. Possiamo farlo creando prima una tabella, utilizzando ancora un comando HTTP PUT:

http://localhost:8080/doc/database/nome_tabella

Quindi, non ci resta che inserire (sempre tramite HTTP PUT) il nostro documento JSON, esattamente come fatto in precedenza e ricordando di specificare una chiave primaria:

http://localhost:8080/doc/database/nome_tabella/chiave_primaria

Si noti che quest'ultima opzione rappresenta un abbozzo di estensione di MySQL al campo dei database NoSQL a documenti, di cui si è ampiante parlato in precedenza su HTML.it.

Alternative a MySQL HTTP Plugin

Sebbene questo plugin sia stato sviluppato dal team di MySQL, esso è attualmente rilasciato solo a scopo sperimentale, e non dovrebbe quindi essere utilizzato in produzione. Esistono tuttavia molte altre soluzioni alternative, che si basano sull'uso di linguaggi server di vario tipo. La tabella seguente ne riassume alcune:

Nome Linguaggio Link
restSQL Java Link
Restlet Java Link
Jersey Java Link
Rester PHP Link
mysql-to-rest Javascript Link

Ti consigliamo anche