Sto lavorando in uno scenario in cui ho un back-end (chiamiamolo server) e un'app client frontend (chiamiamolo il client).
Il client è completamente senza testa e può connettersi a qualsiasi istanza del back-end installato su un server (fornire l'URL).
Nel corso del tempo, possiamo aspettarci che il back-end cresca e si ramifichi in nuove versioni dell'API. Non possiamo supporre che il cliente manterrà la parità con il back-end, quindi il client potrebbe connettersi a un'istanza del back-end con una versione dell'API che non può supportare.
Il client deve conoscere la versione API del back-end connesso in modo che possa intervenire / adeguare le sue funzionalità di conseguenza.
La mia domanda è: In che modo il client può conoscere in sicurezza la versione API del back-end?
La risposta lampante è ovvia: Il back-end pubblicizza la sua versione API in un'intestazione.
Questo, tuttavia, è scomodo per una serie di motivi --- di norma, versioni di software pubblicitari per tutti e diversi è una cattiva idea .
Solo l'applicazione client deve conoscere la versione dell'API.
Un approccio consiste nell'implementare un sistema di chiavi API, in cui il backend può emettere le chiavi che devono essere fornite dal client per sbloccare endpoint API sensibili.
Tuttavia, lo scenario con cui sto lavorando è rivolto all'utente: una sola istanza del client, che supporta molte versioni API, può essere utilizzata per connettersi a molte istanze del back-end.
Lo scenario specifico è un CMS senza testa, con un'app di gestione che deve supportare le installazioni remote del back-end con una versione API inizialmente sconosciuta. La schermata di accesso contiene attualmente campi per l'URL del server, nome utente e password e l'aggiunta di un quarto per "Chiave API" diventa un po 'macchinosa.
Quindi c'è un altro approccio che non ho ancora raggiunto? La chiave API sembra essere la più fattibile finora, ma non voglio necessariamente che gli utenti finali forniscano chiavi al momento dell'accesso.