Ho letto le versioni delle API per le API REST.
La maggior parte degli articoli che ho trovato ( ecco un esempio ) sembrano concentrarsi su due opzioni:
- Controllo delle versioni basato su URI, ad es. %codice%
- Tipo di versione del supporto multimediale, ad esempio aggiungendo ulteriori informazioni all'intestazione
v1/my_resource/
.
Ho anche visto proposte di aggiungere un parametro o un'intestazione di versione personalizzata.
In generale, però, da un punto di vista filosofico, uno sembra finire in territorio non riposante con significative implicazioni complessità e caching, e puritani resto sarebbe insistono sul fatto che il controllo delle versioni è sbagliato ed è necessario per mantenere la compatibilità all'indietro ( ecco le parole di Roy Felding sull'argomento ).
Una cosa che non ho visto menzionata è l'utilizzo del carico utile dei dati come soluzione al problema della modifica delle funzionalità mantenendo la compatibilità con le versioni precedenti.
Prendi il seguente corpo JSON di esempio:
{
"v15": {
"field2": "abc",
"field3": 42
},
"v14": {
"field1": "code still supports me",
"field2": "abc"
}
}
L'idea qui è di avere i nuovi utenti API che agiscono sui dati v15 e i vecchi utenti otterranno comunque i loro dati v14 richiesti ignorando i dati v (n > 14) in base alla progettazione. Naturalmente, lo svantaggio è che sia il codice produttore che il codice cliente dovranno essere in grado di gestire due o più versioni dei dati.
Tuttavia, il compromesso a prima vista mi sembra attraente. Sono scettico, tuttavia, poiché non ho visto questa soluzione descritta in nessun articolo che ho trovato.
La mia domanda è: cosa mi manca? Questa è una pessima soluzione per l'evoluzione di un servizio?