Dovresti avere una strategia di versioning perché è la chiave per un'evoluzione indipendente, ma dovrebbe essere legata a Content-Type, non a URL o altro.
Anche in un ambiente chiuso, dovresti comunque cercare di rendere tutti i componenti di un sistema indipendentemente evolutivi (isolati, modularizzati), in particolare un sistema distribuito come quello basato su client / server. Ciò consente sia a team diversi di lavorare su ciascuno al proprio ritmo, sia le diverse cadenze di rilascio.
Perché non negli URL?
Gli URI identificano cose astratte che non possono essere versionate, come un utente "Andy" o una fattura. Una rappresentazione di quella cosa avrà una serializzazione particolare, che può essere versionata, application/andys-api-v1+json
.
La tua API (come qualsiasi altro sito web) è definita da tre elementi. Queste sono le sole cose che devi documentare se la tua API è RESTful:
- L'URL di root
- Tipo / i di contenuto delle rappresentazioni
- le relazioni di collegamento tra gli URI
Se un client v1 ottiene un collegamento a /users/andy
da una richiesta precedente, può inoltrarlo a un client v2, che può quindi effettuare una richiesta allo stesso URL per ottenere dati sulla stessa cosa, ma in una lingua (tipo di contenuto) può parlare, application/andys-api-v2+json
.
I client v1 e v2 potrebbero essere parti diverse dello stesso programma, nel mezzo di un ciclo di sviluppo. La chiave è che i clienti continuano a lavorare per tutto.