Perché usare i servizi (REST / SOAP) invece di una libreria?


22

Diciamo che stai cercando di suddividere le tue applicazioni in servizi. Ci sono buoni motivi per adottare un approccio SOA piuttosto che creare un'API di libreria che può essere caricata dalle applicazioni che ne hanno bisogno.


6
Ehi, Nate, leggi Google Platforms Rant di Stevey , fornisce grandi approfondimenti sulla domanda relativa alla piattaforma (servizi) rispetto al prodotto (libreria) ...
yannis,

Risposte:


11

La differenza può essere sottile tra entrambi. Ad esempio nel mondo .NET, potresti avere un'applicazione che sembrerebbe monolitica per un utente finale e che funzionerà su una stessa macchina, ma al suo interno sarebbe separata in un gruppo di servizi WCF. Potresti anche avere architetture in cui le librerie non sono fortemente collegate (componenti aggiuntivi / plug-in) e stanno solo seguendo un protocollo quando parlano tra loro.

Se evitiamo di parlare di quei casi intermedi e trattiamo solo una libreria API fortemente collegata rispetto a un servizio REST separato, allora potresti voler considerare i seguenti punti:

  1. Un'API della libreria viene chiamata sullo stesso computer. I servizi possono essere ospitati ovunque ed essere chiamati da qualsiasi luogo. Se stai contando di ospitare l'applicazione su più macchine per motivi di prestazioni / scalabilità / sicurezza, è probabile che dovrai utilizzare i servizi.

  2. La situazione è simile quando si utilizza un servizio da un'applicazione distribuita su più macchine. Ad esempio, se stai facendo un'applicazione per una banca che esegue alcuni calcoli finanziari, un modo è distribuire l'intera applicazione di grandi dimensioni su ogni desktop ed essere costretto a fare aggiornamenti di grandi dimensioni su ogni client ogni volta; un altro approccio sarebbe quello di ospitare una parte di calcolo sui server e distribuire ai desktop solo un'app leggera con solo un'interfaccia utente e un sacco di chiamate a tali server.

  3. Se stai ospitando un servizio REST, chiunque può usarlo: un utente Mac, una persona che utilizza Linux, ecc. Se hai creato una libreria C # con Visual Studio e lo distribuisci come DLL, dimentica gli utenti (clienti ?) chi non ha Windows.


9

Un altro vantaggio dei servizi è che quando si aggiorna il servizio, questo viene immediatamente distribuito a tutti i consumatori del servizio. Quindi, se hai risolto un bug o un problema di prestazioni, tutti ne traggono vantaggio non appena il servizio aggiornato diventa attivo, invece di dover distribuire un aggiornamento che le persone potrebbero scegliere di ignorare.


Vero, ma questo può anche essere uno svantaggio. Quando si effettua una modifica in un servizio da cui dipendono più applicazioni, è possibile interrompere inaspettatamente la funzionalità in una o più di tali applicazioni. Questo non è per spaventare nessuno lontano dai servizi, basta essere consapevoli che è necessario assicurarsi che tutti i consumatori del servizio continuino a lavorare ogni volta che si cambia un servizio. Ancora meglio è lasciare soli i metodi del servizio legacy una volta che sono stati distribuiti e creare nuovi metodi quando è necessario modificare l'implementazione.
Lews Therin,

8

Vantaggi della biblioteca:

Vantaggi del servizio:

  • Tutti ricevono gli aggiornamenti immediatamente e in modo trasparente (a meno che non sia offerto l'API con versione)
  • I consumatori non possono decompilare il codice
  • Può ridimensionare l'hardware di servizio separatamente
  • Tecnologia agnostica. Con una biblioteca condivisa, i consumatori devono utilizzare una tecnologia compatibile.
  • Più sicuro. Il livello UI può chiamare il servizio che si trova dietro un firewall invece di accedere direttamente al DB.

"codice nativo" non ha molto senso qui: a) un servizio può usare anche il "codice nativo" eb) la compilazione just-in-time spesso fornisce le stesse prestazioni del codice nativo.
sleske,

Punto preso. Ciò a cui mi riferisco quando dico "codice nativo" è che una libreria è una chiamata "in elaborazione". Non è previsto un sovraccarico del livello di servizio (ad es. HTTP se si effettua una chiamata API Web)
Cory House,

Sì, l'overhead della chiamata dovrebbe effettivamente essere inferiore. Mi sono preso la libertà di modificare la tua risposta, per sostituire la menzione di "codice nativo" con "overhead di chiamata inferiore". Sentiti libero di modificare nuovamente se non sei d'accordo :-).
sleske,

Quello che mi piace aggiungere è l'uso delle transazioni . In genere è molto più difficile far funzionare le transazioni oltre i confini del servizio, rispetto a una libreria condivisa.
c_mart,

2

Un approccio SOA consente di ospitare e gestire separatamente i vari servizi. Oltre al codice, la distribuzione di un particolare servizio può richiedere molte configurazioni speciali (password, porte, certificati, ecc.). Il consumo di un servizio REST ha una quantità limitata di complessità che può essere chiaramente documentata e facilmente comprensibile. È anche più sicuro perché significa che non è necessario concedere l'accesso ai DB o ad altre risorse ai client.


1

Se viene apportata una modifica a un servizio SOA, tale servizio SOA dovrà essere riqualificato, ritestato e ridistribuito. Tutte le applicazioni che utilizzano tale servizio possono continuare a farlo. Una modifica a una libreria in una DLL significherà che tutti i consumatori di quella libreria dovranno essere riqualificati per fare riferimento a quella DLL, dovranno essere tutti testati nuovamente e dovranno essere tutti ridistribuiti. Esiste anche il pericolo che ciò non accada correttamente e diverse applicazioni avranno versioni diverse della DLL. A volte questo potrebbe non essere un problema - forse ogni sistema dovrebbe avere la versione della libreria che era presente al momento della distribuzione (potresti aver aggiornato il tuo sistema di registrazione per avere utili nuove funzionalità - hai davveroè necessario aggiornare ogni sistema con esso?) in questo caso una libreria va bene. Supponiamo che tu abbia un servizio per il calcolo dell'aliquota fiscale e che le leggi fiscali cambino. Non è necessario aggiornare tutti i sistemi per incorporare questa modifica, sarebbe meglio farlo in un unico posto. In questo caso un servizio è un'opzione migliore.


0

Esistono diverse risposte valide, ma vorrei aggiungere più elementi alle risposte fornite:

Il metodo della libreria API è molto utile quando si desidera interagire con le cose con il minor sovraccarico possibile. La conseguenza è che esiste un accoppiamento più elevato tra l'API e le applicazioni che la utilizzano. A volte, questo va bene per l'applicazione e persino necessario, tuttavia se hai un sistema molto distribuito o pensi che l'interoperabilità sia un problema enorme, potresti dover fare un passo avanti nell'astrazione e usare altri modi di comunicare. Soprattutto, se si desidera disporre di un sistema distribuito, SOAP è una specie del passo successivo in SOA, ma si rimarrà comunque con la dipendenza tra le unità, poiché devono conoscere le reciproche procedure. REST lo porta a un nuovo livello, consentendo a una macchina di apprendere qualcosa sui contenuti degli altri servizi in modo unificato.

Nel tuo caso, se la tua applicazione non è distribuita, non vedo alcun motivo per trasformarla in SOA.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.