Ultimamente ho discusso con alcuni colleghi del modo migliore per approcciare un nuovo progetto e ho pensato che sarebbe stato interessante inserire alcuni pensieri esterni nel mix.
Fondamentalmente, stiamo ristrutturando un sito abbastanza grande (scritto in PHP) e abbiamo opinioni divergenti su come la piattaforma dovrebbe essere configurata.
Requisiti:
La piattaforma dovrà supportare più siti Web interni, oltre a progetti esterni (non PHP) che al momento consistono in un'app mobile e in una barra degli strumenti. Non abbiamo piani / necessità nel prossimo futuro di aprire un'API esternamente (per l'uso in prodotti diversi dal nostro).
La mia opinione:
Dovremmo avere una libreria di classi di modelli nativi ben documentate che possono essere condivise tra i progetti. Questi modelli rappresenteranno tutto nel nostro database e potranno sfruttare funzionalità orientate agli oggetti come ereditarietà, tratti, metodi magici, ecc. Ecc., Oltre all'utilizzo di ORM.
Possiamo quindi aggiungere un livello API in cima a questi modelli che può sostanzialmente accettare le richieste e indirizzarle ai metodi appropriati, traducendo la risposta in modo che possa essere utilizzata in modo indipendente dalla piattaforma. Questo routing per ogni metodo può essere configurato come e quando è richiesto.
La loro opinione:
Dovremmo avere una singola API HTTP che viene utilizzata da tutti i progetti (quelli interni PHP o altro).
I miei pensieri:
Per me, ci sono una serie di problemi nell'usare l'unico approccio dell'API HTTP:
-
Le prestazioni saranno molto costose. Una richiesta di una pagina comporterà diverse richieste http aggiuntive (che sebbene siano locali, sono ancora quelle che dovranno essere gestite da Apache).
-
Perderai tutte le migliori funzionalità che PHP ha per lo sviluppo di OO. Dalla semplice ereditarietà all'impiego di ORM che può farti risparmiare molto codice.
-
Per i progetti interni, il processo effettivo mi fa rabbrividire. Per ottenere il nome di un utente, ad esempio, una richiesta uscirebbe dalla nostra scatola, dalla LAN, tornerebbe indietro, quindi passerebbe attraverso uno script che chiama un metodo, JSON codifica l'output e lo restituisce. Dovrebbe quindi essere decodificato JSON e presentato come un array pronto all'uso.
-
Lavorare con gli array, come ad esempio gli oggetti, mi rende triste in un moderno framework PHP.
I loro pensieri (e le mie risposte):
-
Avere un metodo per fare le cose mantiene le cose semplici. - Faresti le cose solo in modo diverso se usassi comunque una lingua diversa.
-
Diventerà robusto. - Visto che l'API uscirà dalla libreria di modelli, penso che la mia opzione sarebbe altrettanto robusta.
Cosa ne pensi?
Sarei davvero interessato a sentire i pensieri degli altri su questo, specialmente se le opinioni di entrambe le parti non sono basate su alcuna esperienza passata.