Ho letto un numero di post e sono propenso a creare un SOA.
Le mie principali dipendenze sono:
- Necessità di supportare più client
- È necessario che i singoli ambienti client non influiscano su altri ambienti client
Ad esempio, se voglio aggiungere un campo di testo all'applicazione del cliente A, ma non voglio che il client B venga eseguito in alcun modo.
La soluzione che ho è di inviare un indirizzo API insieme al token di autenticazione del client. Ad esempio, il client invierà qualcosa come questo:
api: http://myWebsite/api/clients/ClientA/someServiceCall
Allo stesso modo, da un token, il controller (MVC) saprà quale vista visualizzare per un determinato utente.
La mia domanda è, questa è una buona soluzione al mio problema?
Comprendo che devo chiamare un servizio REST HTTP per l'accesso ai miei dati; ma, sento che questo risolve un sacco di problemi. Ad esempio, potrei vedere quali servizi inviano 404 errori e li sistemo (presumibilmente) prima che vengano persino segnalati.
Ho letto un numero di articoli che sembrano far valere la mia idea. Ho frainteso questo concetto? C'è un approccio architettonico migliore?
Ecco cosa ho letto:
- Dogfooding: come creare una grande API
- Un sito web utilizza una propria API pubblica?
- Rant di Google sulle piattaforme di Google
Ancora una volta, l'obiettivo è di mantenere i singoli ambienti client il più separati possibile; in modo tale che se apportiamo una modifica al livello di servizio, non ci sono tempi di inattività e nessuno viene disconnesso a causa di un aggiornamento del pool di applicazioni.
Il mio piano generale è di incorporare queste chiamate API ovunque siano necessarie; Ad esempio, in un controller MVC o una chiamata AJAX javascript. Ad esempio:
public class HomeController : Controller
{
public ActionResult Index()
{
WebClient client = new WebClient();
string api = /* api from auth token */
User result = JsonConvert.DeserializeObject<User>(client.DownloadString(api));
return View(result);
}
}