Ho diverse domande su un'idea di architettura completa. Spero che qualcuno con una grande esperienza possa aiutarmi perché sono praticamente bloccato in tutte le possibilità.API come nucleo per un sito Web e un'app mobile
Sto pianificando di riscrivere un sito Web della comunità. Il nostro cliente desidera utilizzare app mobili native in futuro. Quindi dovrò tenerne conto. Per questo motivo ho deciso di creare un'architettura API REST al 100% basata sul framework PHP Kohana. Ho scelto Kohana perché questo rende scalabile l'API interna su un altro server molto facilmente senza molti sforzi extra. (Kohana minaccia le richieste di url interne non come HTTP, quindi non c'è molto sovraccarico all'inizio e può scalare su HTTP con alcune piccole modifiche al codice).
Inizialmente l'API sarà privata, ma in seguito potremmo renderla pubblica per consentire a più servizi di connetterci facilmente.
De struttura di base resto è come segue:
- /gatti
- /gatti/1
- /gatti/1/custom
'custom' potrebbe essere 'bambino' per esempio.
stesso vale per:
- /annunci
- /offerte
- /utenti
- /banner
- ecc ..
Si tratta di entità perfette per l'API perché l'app mobile utilizzerà sicuramente tutte queste funzionalità.
Quindi possiamo concludere che il nucleo del sito web è REST. Quindi in pratica voglio rendere il sito Web un client dell'API proprio come l'app nativa in futuro. In questo modo la manutenzione sembra molto più semplice.
Ciò che mi preoccupa è il fatto che c'è molto più di questo (gestione dei file caricati, fatturazione, fatture automatiche per la fatturazione, e-mail per gli annunci e così via). Il caricamento dei file deve passare attraverso il sito Web all'API. È questa pratica comune? Se non lo faccio, il sito web farebbe la logica di caricamento, il che rende il sito non più client e l'app stessa. Pertanto, l'app mobile non può nemmeno essere caricata e sia l'API che il sito Web devono conoscere la cartella di caricamento (logica duplicata).
ho pensato di creare le seguenti moduli:
- comunità-api
- comunità sito
Api sembra essere il nucleo allora. Ma ... che dire di cronjobs ecc? In realtà, non dovrebbero far parte del sito Web, in quanto si tratta solo di un "cliente". Sento che dovrebbero interagire direttamente con il modello o l'API.Quindi, in pratica l'API diventa più simile a un gateway per il core e pensiero che ho bisogno di questo:
- comunità-core
- modelle
- Cronjobs
- Auto indirizzi (parte di cronjobs)
- Fatture, ecc
- comunità-api
- Interagisci con i modelli a nucleo attraverso HTTP
- comunità sito
- Sito
- Admin
Il nucleo cronjob s sono un'eccezione alla struttura REST. Sono gli unici in grado di modificare i dati senza passare attraverso l'api. Almeno questa è stata la mia idea perché appartengono al nucleo e l'API è in cima al nucleo.
Ma dal design sembra sbagliato. La manipolazione dovrebbe solo passare attraverso l'API!
Alternativa:
- comunità-core
- modelle
- comunità-api
- Interagisci con i modelli a nucleo attraverso HTTP
- comunità di business
- cronjobs
- Auto invii (parte di cronjobs)
- fatture ecc
- comunità sito
- Sito
- Admin
Questo aspetto migliore di progettazione per me. Mindmap illustration http://mauserrifle.nl/mindmap.jpg
Domande principali
1)
caso cronjobs manipolare tramite l'API o nucleo modelli?
2)
mia fattura cronjob ha bisogno di un modello più o meno lo stile del sito principale, naturalmente. Ma se il mio cronjob fa parte del business o core, non avrà conoscenza del mio sito principale. Cosa ha senso risolvere questo?
3)
Mio sito verrà utilizzato baffi come un motore di template. (sia php che javascript possono analizzare questi modelli). Ho pensato di utilizzare l'API direttamente per le chiamate Ajax ma poi ho realizzato:
Il sito ottiene i dati da API, formatta i timestamp alle date (Y-m-d) per il modello e quindi esegue il rendering. Se permetto a javascript di chiamare direttamente l'API, anche javascript deve avere una logica (formattazione). Questo è un codice duplicato! Sembra che l'unica soluzione sia chiamare il sito Web per ajax (che chiama l'API e i formati) e restituire il json formattato. Ho ragione?
Ma .... chiamate semplici come l'eliminazione di un annuncio può passare attraverso l'API direttamente (ad esempio DELETE:/ads/1
ho un mix di chiamate ....
Qualsiasi soluzione migliore per questo
4)
Globale:? la mia architettura troppo complesso? Qualche alternativa dovrei prendere in considerazione?
Mi piacerebbe sentire il vostro feedback!
Immagino che la tua ultima frase sia positiva? (Il fatto che tu abbia già una API pubblica costruendola API-Centric?) Grazie per quell'articolo, si riferisce al blog di Twitter che mi ha ispirato a usare questo modo di costruire, quindi leggerò anche quello e tornerò a questo argomento più tardi :) – mauserrifle
Ok la maggior parte dell'articolo ho già implementato (il modo kohana). Ho avuto un buon feeling con la creazione del sito web come client dell'API. Ancora incerto su dove mettere i cronjobs ecc (che è la logica interna). Devo anche creare un amministratore (parte del sito Web) per gestire tutte le entità extra, sembra un sovraccarico di lavoro:/Poi di nuovo, una volta costruito ... molte possibilità in futuro. Consigli per questo? – mauserrifle
Questo è esattamente il mio punto. Esiste la necessità, in quasi il 100% dei casi, di disporre di funzionalità specifiche relative alle applicazioni, come i cronjob, che non si adattano perfettamente a un approccio API-Centric. Ciò significa che dovresti, a mio parere, avere i servizi web disaccoppiati dall'applicazione principale, come wsdl. –