Itequia

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

Computer monitor displaying 'API' surrounded by icons representing coding, cloud storage, and data servers.
Combined configuration in .NET for reading API version from headers, query strings, and media types using ApiVersionReader.Combine.

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

Example of versioned API endpoints: /v1/usuarios and /v2/usuarios, illustrating URL-based versioning.

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?

Code snippet of a .NET API controller using route-based versioning with attributes for versions 1.0 and 2.0.

Versionat en el Header

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

Duplicate of the previous code snippet showing route-based API versioning in a .NET controller."

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

Alternative .NET API controller using method-level versioning with attributes for versions 1.0 and 2.0.

En la configuració de serveis en Program.cs:

Sharepoint Library.

Versionat mitjançant Paràmetres de Query

Una altra opció és incloure la versió en els paràmetres de la query string:

A Microsoft List with several columns.

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

Code snippet configuring query string-based API versioning in .NET using QueryStringApiVersionReader.

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

Code snippet configuring media type-based API versioning in .NET using MediaTypeApiVersionReader.

Versionado mediante Media Types (Content Negotiation)

En aquest enfocament, la versió s’especifica en el header Accept com a part del tipus de mitjana:

Combined configuration in .NET for reading API version from headers, query strings, and media types using ApiVersionReader.Combine.

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

Code snippet showing how to add API versioning and versioned API explorer services in .NET for documentation and Swagger integration.

En la configuració de serveis en Program.cs:

Swagger UI displaying versioned API endpoints for 'UsuariosController', showing separate documentation for versions 1.0 and 2.0.

Quines són les millors Pràctiques per al API versioning en .NET?

  1. 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.

  1. 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.

  1. 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.

  1. 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.

  1. 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:

Swagger UI interface showing detailed documentation for version 2.0 of the 'UsuariosController' API endpoint."

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