API Versioning: Una Guia Completa sobre Millors Pràctiques i Compatibilitat en .NET


La creació i gestió de APIs és una part essencial del desenvolupament modern de programari. Una de les consideracions clau en aquest procés és com manejar el API versioning de manera efectiva. En l’ecosistema .NET, existeixen diverses estratègies i millors pràctiques que pots seguir per a assegurar que la teva API sigui mantenible, extensible i compatible al llarg del temps.
Què és API Versioning?
API versioning es refereix a la pràctica de gestionar els canvis en una API perquè els usuaris actuals continuïn usant la versió existent mentre s’introdueixen noves funcionalitats o millores. Aquest procés és crucial per a mantenir la compatibilitat, assegurant que les aplicacions i serveis que depenen de la API no es trenquin amb noves actualitzacions.
Raons per a Implementar API Versioning
- Compatibilitat cap enrere: garanteix que les aplicacions existents continuïn funcionant fins i tot quan la API evoluciona.
- Flexibilitat en l’evolució: permet als desenvolupadors afegir noves funcionalitats o fer canvis importants sense afectar els usuaris existents.
- Manteniment simplificat: facilita el manteniment de múltiples versions de la API, cadascuna adaptada a les necessitats de diferents grups d’usuaris.
Quines són les diferents Estratègies de API Versioning en .NET?
En .NET, hi ha diverses estratègies comunes per a implementar el API versioning. Cadascuna amb els seus propis avantatges i desavantatges:
Versionat en la URL
Aquesta és l’estratègia més comuna i directa, on la versió de l’API s’inclou en la URL del endpoint. Per exemple

Avantatges:
- Fàcil d’implementar i entendre.
- Visible en la ruta, la qual cosa permet als clients identificar ràpidament quina versió estan utilitzant.
Desavantatges:
- Pot portar a URLs desordenades a mesura que augmenten les versions.
- No és ideal si s’espera un gran nombre de versions.
Com és la Configuració en .NET 8 en la URL?

Versionat en el Header
En lloc d’incloure la versió en la URL, es pot especificar en un header HTTP personalitzat:

Avantatges:
- Manté les URLs netes i consistents.
- Facilita l’evolució de la API sense canvis en l’estructura de la URL.
Desavantatges:
- Pot ser menys evident per als desenvolupadors que no estan familiaritzats amb la API.
- Els canvis en els headers poden requerir configuracions addicionals en alguns clients HTTP.
totes les claus de la Configuració en .NET 8 per a versionat per header

En la configuració de serveis en Program.cs:

Versionat mitjançant Paràmetres de Query
Una altra opció és incloure la versió en els paràmetres de la query string:

Avantatges:
- Flexible i fàcil de modificar.
- No requereix canvis en l’estructura de la URL ni en els headers.
Desavantatges:
- Pot fer que les URLs es vegin desordenades.
- No és tan intuïtiu com la versió en la URL.
Configuració en .NET 8 per a versionat mitjançant query string

Respecte a la configuració de serveis en Program.cs:

Versionado mediante Media Types (Content Negotiation)
En aquest enfocament, la versió s’especifica en el header Accept com a part del tipus de mitjana:

Avantatges:
- Molt flexible i permet als clients sol·licitar la versió exacta que necessiten.
- Útil en APIs que serveixen múltiples tipus de contingut.
Desavantatges:
- Pot ser complex d’implementar i mantenir.
- No és intuïtiu per a tots els desenvolupadors.
Configuración en .NET 8 para versionado mediante Media Types

En la configuració de serveis en Program.cs:

Quines són les millors Pràctiques per al API versioning en .NET?
- Planifica amb Anticipació
El versionat de API és més fàcil de manejar quan es planifica des del principi. Abans de llançar el teu API, considera com es gestionaran les futures versions i quina estratègia de versionat utilitzaràs.
- Documentació clara
Proporciona documentació clara i detallada per a cada versió de la teva API. Els usuaris han de poder entendre fàcilment quines versions estan disponibles, quins canvis s’han fet en cadascuna i com migrar entre versions.
- Compatibilitat cap enrere
És crucial mantenir la compatibilitat cap enrere tant com sigui possible. Els canvis rompents han d’introduir-se en una nova versió, i s’ha de donar als usuaris suficient temps i recursos per a migrar.
- Deprecació de versions antigues gradualment
Quan una versió de la API es torna obsoleta, implementa un procés clar per a la seva deprecació. Informa els usuaris amb antelació i ofereix suport per a la migració a versions més noves.
- Automatització de proves
Incorpora proves automatitzades que cobreixin totes les versions de la API que estàs mantenint. Això assegura que els canvis en una versió no afectin negativament a unes altres.
Implementació del Versionat de API en .NET
.NET 8 proporciona un ampli suport per al API versioning a través del paquet Microsoft.AspNetCore.Mvc.Versioning. Aquest paquet facilita la implementació de diferents estratègies de versionat, incloent versionat per URL, headers, query string i mitjana types.
Exemple de configuració general:

Conclusions
API versioning és una pràctica essencial per al desenvolupament de programari a llarg termini. En implementar una estratègia de versionat adequada en .NET 8, pots assegurar-te que el teu API sigui flexible, mantenible i compatible amb futures evolucions. Els exemples de codi proporcionats mostren com implementar aquestes estratègies en .NET 8, la qual cosa t’ajudarà a gestionar el cicle de vida de les teves APIs de manera efectiva.
Aitor Riera – Software Developer at Itequia