API RESTful vs elaborazione complessa - un'alternativa

0

Spero di aver scelto la comunità giusta per questo (non c'è architettura software / design di uno)!

Vorrei chiederti delle considerazioni pratiche sulle API RESTful (e modelli di progettazione simili come per quella materia) nel contesto di complesse operazioni lato server / logica aziendale.

Poche cose da tenere a mente:

  1. So che REST non è l'unico modo per andare, né il proiettile d'argento
  2. Non sono riuscito a trovare alcun modello / pratica di progettazione che mi permettesse di mantenere l'API strutturata (come fa REST) e di renderla sensata per ciò che devo fare.

Penso che sarà molto più facile se ti faccio un esempio, quindi eccoci qui: Sto affrontando una logica aziendale che si estende su più passaggi. I passaggi sono:

  1. L'utente effettua varie scelte e le invia (diciamo che stanno usando il modulo HTML).
  2. Queste scelte sono convalidate per essere entrambe aggiornate (con lo stato del database, ad esempio alcune opzioni potrebbero non essere più disponibili al momento della loro presentazione) e contro se stesse (perché è possibile avere solo determinate combinazioni di opzioni messe insieme ).
  3. Se tutto va bene, vengono effettuati alcuni aggiornamenti del database (ad es. per creare un pre-ordine di merci limitate per quell'utente).
  4. Viene quindi fornita all'utente la risposta (lascia che sia il modulo HTML per ora) contenente informazioni che consentano loro di completare un altro passo facendo ancora più scelte - diciamo che dovrebbero scegliere il loro metodo di pagamento per merci precedentemente prenotate.
  5. Presentano nuovamente le loro scelte, in risposta ricevono informazioni che consentiranno loro di completare il pagamento.
  6. E qui inizia a diventare brutto ...

Fino al punto 5 sono in grado di identificare le risorse REST, ecc. Diventa davvero difficile elaborare ulteriori passaggi. Perché? Perché una volta che l'utente ha completato il pagamento (in un modo o nell'altro, non importa), riceverà l'URL del mio endpoint API che dovrebbe verificare il pagamento, elaborare il pre-ordine nell'ordine effettivo e restituire conferma all'utente. Che in caso di REST dovrebbe essere (la conferma) una risorsa. Questo va bene, ma avendo in mente il processo di trasformare il pre-ordine in un ordine significa creare più risorse di tipi diversi, significa che "nascondiamo" queste risorse all'utente.

Fondamentalmente, ci sono un sacco di cose che accadono sotto il cofano e dovrebbero probabilmente essere restituite in una conferma. Il problema è che non c'è alcuna conferma da nessuna parte nel database.

Ma bene, passiamo alla domanda: c'è qualche schema di progettazione, struttura, architettura più adatta a questo tipo di problemi?

Note a margine:

  1. Ho detto che non ci sono conferme nel database - Ho un'app monolitica che mi piacerebbe trasformare in un'applicazione basata su API per disaccoppiare back-end e front-end.
  2. Sono anche preoccupato per le prestazioni. Credo che alla fine questo potrebbe essere fatto in modo RESTful (sebbene possa essere difficile senza mantenere lo stato), ma ciò significherebbe rendere l'API semplice per problemi complessi, con il risultato di molte chiamate API per ottenere lo stesso effetto.

Modifica

Un'altra cosa che mi riguarda e che mi fa andare contro l'API RESTful è che richiederebbe che queste chiamate API multiple completassero l'intero processo agendo sulle risorse, il che significherebbe che qualsiasi app client che utilizza questa API dovrebbe implementare nuovamente la stessa logica invece di incapsulare questa logica sul lato server

    
posta pzaj 18.08.2017 - 16:44
fonte

1 risposta

2

Ottima domanda.

Sembra che tu abbia un'applicazione monolitica che vorresti ridimensionare in un insieme di applicazioni più piccole usando il design basato su API per il codice "back-end". Sembra anche che l'idea di usare REST sia interessante per te, il che non è una cosa negativa dato che è molto popolare e talvolta si riferisce a uno dei modi standard per integrare più sistemi / app.

Scopri il modello architettonico "Microservizi". Un buon punto di partenza sarebbe un articolo di Martin Fowler . Se hai voglia di approfondire ulteriormente, posso consigliare un ottimo libro di Sam Newman - Creazione di microservizi . Il libro è una risorsa più completa e ha anche un capitolo sulla divisione di un'applicazione monolitica.

spero che questo aiuti.

    
risposta data 19.08.2017 - 17:12
fonte