¿Debería mantener numbers de versión separados de su interfaz basada en la web y sus API?

Supongamos que está desarrollando una plataforma que tiene una interfaz basada en web para sus usuarios y API para desarrolladores de terceros. Algo similar a Salesforce (o incluso a Facebook).

Salesforce y Facebook, ambas plataforms tienen una interfaz web normal para sus usuarios y API para desarrolladores externos.

Idealmente, cualquier API llama internamente a la misma function que está siendo utilizada por la interfaz basada en web. Por ejemplo, el button "Crear un proyecto" y la API "CreateProject" invocan internamente la misma function "createProject ()". Entonces puede mantener la misma versión para ambos ya que en la mayoría de los casos están estrechamente integrados.

Ahora, a veces agrega una function que hace que incremente la versión menor de la interfaz basada en la web, pero como no está implementando esa function en la API, la versión de la API debe permanecer como está.

¿Cómo manejas esos casos? ¿Debería mantener versiones separadas de su interfaz basada en la web y sus API para su plataforma?

Depende. Porque es difícil ofrecer una respuesta definitiva a esta pregunta. Pero compartiría algunas ideas y profundizaré algunos escenarios para ayudar, en el mejor de los casos.

Sugeriría que hubiera dos versiones de la API. apis internas y apis públicas . Al final de la persona que llama, serían dos apis / puntos finales físicamente distintos para que las políticas de security y muchas otras cosas se puedan hacer sin exponer mucha información y sin transmitir ninguna responsabilidad sobre el código para manejar la distinción basada en políticas. sobre quién llama desde donde, ya que eso puede fallar bastante fácilmente.

Está bien si ambas versiones de las API se consolidan hasta cierto punto sin involucrar ningún riesgo de security, pero un equipo separado de ingenieros expertos puede diseñar esta consolidación para que sea transparente pero segura. Es una compensación entre la reutilización de código y todo lo demás. Esto es muy subjetivo y puede convertirse en una discusión interminable. Pero el software evoluciona muy bien como resultado de este process de layout si es ágil e iterativo.

Las apis deben ser externalizables e interoperables . Si el proyecto es muy grande, entonces los diferentes equipos que trabajan en partes separadas del proyecto interactuarán entre sí, utilizando aplicaciones internas solamente. Sin pañuelos. Sin acceso directo a datos. Solo apis.

Este enfoque lo ayudará a crear conciencia de lo que se está haciendo en el proyecto en todos los equipos si las API son reconocibles, lo que personalmente creo que es muy bueno para el trabajo en equipo de queueboración. De hecho, también ayuda en la reutilización. Las testings se unifican y automatizan. Cada equipo se hará responsable de su propio trabajo y, por lo tanto, debería ser fácil abordar la responsabilidad.

Hay más cosas que pueden entrar aquí, pero creo que esto es suficiente a un alto nivel.

SI está permitido, también leería esta pregunta como

"¿Debería tener architecture puramente orientada a services o no?"

Y mi respuesta sería: ** Depende. ** Porque es difícil ofrecer una respuesta definitiva a esto …

No publique la function central directamente a través de la API, en su lugar cree todas las funciones API como funciones proxy y todos los cambios en las funciones centrales se manejarán en las funciones proxy.

Cambie la versión de la API pública si hay cambios en la input / salida API.

De esta forma, puede lograr la reutilización del código y no aumenta la versión pública de API con frecuencia.

Editar:

Si está hablando del número de versión del software. Mi respuesta es Sí.