En realidad, lamentablemente, ese no es el caso. Tenemos muchos desarrolladores que simplemente los ignoran. Con el tiempo, nuestro código base se ha vuelto tan grande, como dijimos, tenemos 5,000 tipos y muchos esquemas, que no es factible mantener estos campos obsoletos para siempre. Debido a que tenemos APIs versionadas y esquemas versionados como dijo Guy, pronto comenzaremos a ser un poco más agresivos en la eliminación de campos obsoletos por esa razón.
En cuanto a los problemas de nomenclatura V2 y V3, eso fue, como dijo Guy, debido a una limitación que teníamos en nuestro proceso de versionado, que ahora está solucionado. Esperemos que eso nunca vuelva a suceder, porque francamente son feos y muy confusos. ¿Cuál debo usar? Price V2, V3, pero estoy usando la versión de enero del esquema, pero estoy usando V2, es un desastre, ¿verdad? A todos nos encanta tener APIs agradables con nombres adecuados y somos muy obsesivos con que las cosas sean consistentes. Por lo tanto, eliminar las V2 y V3 es algo que definitivamente queremos hacer.
Tienes una pregunta sobre el seguimiento del uso, de la cual hablamos un poco, que es nuestro informe de salud de la API que ven los socios. Pero también internamente, tenemos paneles que podemos consultar y decir, ¿cuántos clientes están utilizando este campo específico? Eso lo utilizamos mucho para informar nuestras decisiones sobre cuándo podemos obsoleto un campo. Si está obsoleto, ¿qué tan agresivos podemos ser al eliminarlo en una versión futura? Si este campo es muy, muy popular, aunque esté obsoleto, tal vez nos preguntemos por qué es tan popular. ¿El nuevo campo no está haciendo lo que se supone que debe hacer, o no es mejor de lo que habíamos anticipado? No sé si hay alguna herramienta de código abierto para hacer esto. Sé que tenemos una gema de código abierto llamada GraphQL Metrics, que rastrea más cosas sobre los tiempos de ejecución de los resolutores y demás, pero internamente, tenemos herramientas que enumeran cada consulta que llega, y básicamente hacemos un recuento de cada campo solicitado y lo agregamos. Todo eso va a un panel detrás de escena que podemos usar para determinar cuándo pueden desaparecer las cosas. Pero sí, los campos obsoletos, sinceramente, son geniales, pero también pueden ser bastante problemáticos de manejar. Así que estamos buscando formas de mejorar eso. Me encantaría escuchar los pensamientos de otras personas al respecto. Sé que también ha habido discusiones en la especificación de GraphQL sobre los argumentos, porque creo que los argumentos actualmente no se pueden marcar como obsoletos, lo cual está integrado en la especificación, lo cual es interesante. Así que también hemos tenido que hacer algunos trabajos al respecto. Sí, creo que hay mucho trabajo por hacer en este espacio en general, en cuanto al versionado de APIs y los cambios disruptivos, y cómo hacerlos menos dolorosos, especialmente para los clientes móviles, como dijo Tila, porque en los dispositivos móviles, una vez que la aplicación está ahí fuera, técnicamente no puedes obligarlos a actualizar. Quiero decir, puedes hacerlo, pero no es la mejor experiencia de usuario, ¿verdad? Así que esto es algo en lo que todos debemos pensar. Sí, definitivamente hay margen para la innovación en este espacio. Sí.
También agregaré que, obviamente, decimos que odiamos cuando los campos son como money v2, money v3, o como money v7, porque se siente bastante mal. Al mismo tiempo, creo que si tu API es mucho más pequeña, fue un esfuerzo realmente grande para nosotros implementar un sistema de versionado de API, ¿verdad? Entonces, no creo que tener un par de campos v2 sea lo peor. También diré que obviamente tienes que seguir el proceso de hacer un campo v2, hacer que todos tus clientes lo utilicen, luego deshacerte de tu campo antiguo o cambiar tu campo antiguo y luego migrarlos de nuevo al campo de dinero original, ¿verdad? Así que creo que siempre es un proceso largo deshacerse de esas v2 y v3 en tu código base. Pero creo que puedes hacerlo como un proceso más fácil sin implementar un sistema completo de versionado. No sé, esos son mis pensamientos. ¿Todos están de acuerdo o en desacuerdo? ¿Es malo y no deberíamos permitir que nadie lo haga? Sí. Tienes que trabajar dentro de las limitaciones de tu sistema, supongo. Sí, creo que Alice lo dijo perfectamente antes. No hay una solución única para todos. Somos un poco afortunados porque el generador de Ruby GraphQL que tenemos admite muchas cosas que utilizamos para el versionado. Y parte de eso ha sido un proceso colaborativo, pero si estás ejecutando un backend de nodo o algo así, es posible que las herramientas que tienes disponibles sean diferentes. Entonces, esto es solo lo que ha funcionado para nosotros, pero no hay una solución única para todos. Oh, de acuerdo. Vamos a pasar a Greg. ¿Puedo interrumpir con una pregunta de seguimiento? Adelante. ¿Haces un seguimiento de qué aplicaciones solicitan los campos obsoletos para poder enviar mensajes específicos, como, `oye, tu aplicación todavía está utilizando un campo antiguo`? Sí. El último enlace que compartí en el chat es nuestro informe de salud de la API. Entonces, para eso, es como un socio. Para nosotros, el socio es un desarrollador de aplicaciones de terceros. Por lo tanto, estamos rastreando todo por aplicaciones para que un desarrollador de aplicaciones pueda ingresar y decir, oh, estoy utilizando estos campos. Y estos campos se eliminarán o cambiarán en funcionalidad dentro de tres versiones a partir de ahora. Y a medida que nos acercamos, le damos mucho pensamiento al plan de comunicación para esto, del cual no tengo un enlace exacto, pero puedes leer sobre ello en el sitio web de shopify.dev. A medida que nos acercamos a las fechas, enviamos correos electrónicos masivos solo para recordar a las personas que se acerca. Porque puedes decirle a alguien que, hey, este campo desaparecerá en un año y no piensan que es algo que deben solucionar con urgencia. Por lo tanto, necesitan ese recordatorio de 30 días o lo que sea, solo para refrescar su memoria. Jonathan, ¿quieres agregar algo? Lo siento. No, dijiste exactamente lo que iba a decir. Lo que ibas a decir, de acuerdo, genial. Lo siento. De acuerdo, Greg, esta es una pregunta para ti, pero luego la abriremos como una pregunta para todos. Si las uniones de entrada existieran hoy, ¿las usarías en lugar de tu solución actual de one of? Interesante pregunta. Supongo que diría que no todavía. Las uniones de entrada han generado, siento que, mucho entusiasmo acerca de ellas. Y siempre son como la solución que falta y que estamos a un paso de resolver y este problema se resolverá con la unión de entrada. Y he escuchado eso tantas veces y luego descubrir que realmente esta solución de one of es la que resuelve el problema y lo resuelve mejor que cualquier cosa que la unión de entrada pueda hacer, porque la unión de entrada no podría hacer nada más allá de ser un conjunto de objetos de entrada que uno puede juntar y recibir. Y lo que tenemos hoy en día que podemos hacer con una validación simple del lado del servidor puede permitirnos ingresar escalares o listas o cualquier otra cosa. Y simplemente se adapta a muchos más casos de uso y ni siquiera es muy difícil de hacer. Así que sí, estoy firmemente del lado de que no necesitamos necesariamente esta especificación y espero que no se implemente. Genial, gracias por compartir tus opiniones algo sesgadas sobre las uniones de entrada. Esto es... Siéntete libre de proporcionar el contraargumento. No, no siento que pueda hacerlo. Básicamente me has convencido. Estoy en el equipo de one of... Entonces, Greg, esta es una pregunta para ti, pero luego la abriremos como una pregunta para todos. ¿Cuándo te has visto atrapado por las restricciones de no nulidad? Sumergámonos en la nulabilidad. Oh, Dios, la nulabilidad. Tengo una larga historia con la nulabilidad y comenzó desde... Mi experiencia previa a Shopify, estaba trabajando en arquitecturas de gráficos distribuidos.
Comments