La mia azienda ha sviluppato un'API RESTful che viene utilizzata da alcune applicazioni interne. Questa API consente ai clienti di addebitare pagamenti una tantum e pagamenti ricorrenti. Entrambe queste cose sono costituite da risorse; una persona richiede un metodo di pagamento per creare un abbonamento che creerà una transazione . I dati sono molto relazionali, ma uno dei nostri flussi di lavoro è il seguente.
Supponiamo che una nuova persona stia cercando di impostare un pagamento ricorrente. Il nostro flusso di lavoro è simile a questo:
- Crea una persona
- Crea un metodo di pagamento collegato a quella persona
- Crea un abbonamento collegato a quel metodo di pagamento
- Crea una transazione collegata a quell'abbonamento
Ciascuna di queste operazioni è rappresentata da un endpoint su uno dei nostri controller che costituisce l'API REST della nostra applicazione.
Man mano che l'app è cresciuta, molte persone mettono in dubbio perché siamo così fermi nel rispettare questo design modulare dell'API. Ogni volta che un nuovo cliente deve integrarsi con questa applicazione per creare abbonamenti, è necessario implementare il codice che segue questi quattro passaggi. La nostra risposta è sempre stata: "buona progettazione del software e REST, promuovere la separazione delle preoccupazioni e mantenere la costruzione di un tipo di risorsa separata da un'altra ci consente di mantenere le cose flessibili e mantenibili". Il principale contrappunto a questo è che, come tutti i software, abbiamo riscontrato alcuni bug tra le fasi di questo processo e le persone sostengono che i nostri problemi sarebbero stati risolti (o meno problematici) se avessimo un endpoint che ha fatto tutto. / p>
Il progetto ha pochi anni e ha visto un buon uso della produzione. Sono molto riluttante a credere che un endpoint "tutto-in-comune" sia la cosa giusta da fare ma sento che tutto ciò che devo sostenere in questo dibattito è teoria e principi. Alcuni dei nostri problemi sarebbero probabilmente stati risolti riducendo il chatter tra i sistemi, ma qualcosa sembra intrinsecamente sbagliato mettendo un gruppo di operazioni distinte in un unico metodo e chiamandolo un giorno.
C'è qualcosa che mi manca? Sono forse di parte perché ho aiutato a progettare l'app fino a questo punto o gli altri sviluppatori stanno sacrificando manutenzione e design per risolvere i problemi di oggi?
Spero che questa domanda non venga chiusa come "basata principalmente sull'opinione pubblica" perché sto cercando alcune risposte basate sull'esperienza del mondo reale piuttosto che sulla teoria / opinione (poiché credo già che io, in teoria, ho ragione).