Ir al contenido principal
Laravel, shipping fast.

Capitulo 17

El paquete compartido

Julian Beaujardin

Todo lo que hay en este libro ha sido cierto de una API. Un EnsureTokenIsValidMiddleware. Un ErrorResponse. Un equipo que acordó, una vez, cómo debía verse un controlador. Ese acuerdo es fácil de mantener cuando hay una sola base de código donde mantenerlo.

Se pone difícil en cuanto hay un segundo servicio. Una API de licencias. Una de dominios. Una de generación con IA. Una aplicación de cara al cliente que habla con las tres. Cada una necesita la misma autenticación por token, el mismo límite de frecuencia, el mismo sobre { "data": {...} }, el mismo comportamiento de reintento y espera cuando una llamada aguas abajo es limitada. Puedes escribir esa lógica cuatro veces, o puedes escribirla una y depender de ella cuatro. Este capítulo va de la segunda opción, y de la disciplina que exige y que escribir el mismo código cuatro veces nunca te pidió.

Un paquete compartido es cómo una docena de servicios se ponen de acuerdo sin una reunión.

Una API se convierte en una flota

Este es el cambio que marca el capítulo. Cada capítulo anterior respondía a «¿cómo debería comportarse este endpoint?». Este responde a otra cosa: «¿cómo se comportan igual una docena de servicios sin que una docena de personas se acuerden de hacerlo?».

Un servicio valida un token Bearer. Otro servicio valida un token Bearer. Un tercero valida un token Bearer. Escritos por separado son tres implementaciones, tres fallos sutilmente distintos esperando a divergir y tres sitios donde tiene que aterrizar el arreglo la próxima vez que alguien encuentre un agujero en cómo se comprueba la expiración. Escrito una vez y usado en todas partes es una implementación, una superficie de fallo, un sitio donde aterriza el arreglo.

La flota de este libro lo resuelve con webplo/api-infrastructure, un paquete de Composer instalado en cada aplicación igual que cualquier dependencia de terceros. No es un servicio que despliegas. No es un servicio al que puedas hacer una petición. Es una librería que se compila dentro de cada aplicación en tiempo de construcción, y su código corre dentro de cada uno de esos procesos como si se hubiera escrito ahí. Esa distinción —librería frente a servicio— es sobre la que gira todo este capítulo, y es fácil de difuminar si no prestas atención.