Toto è un piccolo quadro destinato ad accelerare lo sviluppo di API server. Si è costruito sulla base di Tornado e attualmente può utilizzare MySQL o MongoDB come database di supporto.
Installazione
Il modo più semplice per installare Toto è con pip. Basta eseguire pip installare git -e + git: //github.com/JeremyOT/Toto.git#egg=Toto per installare l'ultima versione del modulo Toto sulla vostra macchina.
Utilizzo
Iniziare con Toto è facile, tutto quello che dovete fare è fare una nuova istanza di toto.TotoServer e chiamare run (). Toto ha bisogno di un modulo principale da utilizzare per il metodo di ricerca. Per impostazione predefinita, un TotoServer cercherà un modulo chiamato metodi. Il parametro method_module può essere utilizzato per specificare un altro modulo per nome.
Configurazione
Per impostazione predefinita, Toto è configurato per l'esecuzione sulla porta 8888 e connettersi a un server in esecuzione su localhost MongoDB. La configurazione può essere effettuata in tre modi con ogni ignorando l'ultima:
1. Con le opzioni passando come parametri denominati al costruttore TotoServer.
2. Attraverso un file di configurazione passando il percorso del file di configurazione come primo parametro al costruttore TotoServer.
3. Con i parametri della riga di comando (--opzione = 'valore stringa' --opzione = 1234)
Combinando i metodi di configurazione può essere utile durante il debug. Eseguire lo script con --help per visualizzare un elenco completo dei parametri disponibili.
Metodi
I metodi si fa riferimento al nome di ogni richiesta. a.b.c (o / b / c) mappe a methods.a.b.c. Per aggiungere nuovi metodi, aggiungere moduli e pacchetti per i metodi (o specificato) del pacchetto (vedi il pacchetto conto di riferimento) e assicurarsi che ogni modulo callable definisce richiamare (handler, parametri) dove handler è il TotoHandler (sottoclasse di tornado.web. RequestHandler) la gestione della richiesta corrente.
handler.connection.db fornisce l'accesso diretto al database utilizzato dal framework sessioni e dei conti.
handler.session fornisce l'accesso alla sessione corrente o None se non autenticato. Proprietà disponibili:
- Session.user_id - l'ID utente corrente
- Session.expires - il timestamp unix quando la sessione scade
- Session.session_id - l'ID sessione corrente
- Session.state - un dict pitone contenente lo stato attuale, è necessario chiamare session.save_state () a persistere eventuali modifiche
Per applicare l'autenticazione per qualsiasi metodo, decorare la funzione con @ toto.invocation.authenticated invoke (). I tentativi non autorizzati di chiamare metodi autenticati restituirà un errore non autorizzato.
I parametri obbligatori possono essere specificati per decorare una funzione invoke () con @ toto.invocation.requires (param1, param2, ...).
I moduli Metodo possono usufruire di funzionalità non-blocking del Tornado per decorare una funzione invoke () con @ toto.invocation.asynchronous. Quando l'operazione asincrona è stata completata è necessario chiamare handler.finish () per terminare la richiesta. I dati possono essere inviati al cliente con handler.write () e handler.flush (). Facoltativamente, i moduli possono implementare on_connection_close () per ripulire tutte le risorse se il cliente chiude la connessione. Vedere RequestHandler.on_connection_close () nella documentazione Tornado per ulteriori informazioni.
È importante ricordare che Tornado richiede che tutte le chiamate da scrivere (), flush () e finitura () vengono eseguite sul thread principale. È possibile pianificare una funzione da eseguire sul thread principale con IOLoop.instance (). Add_callback (richiamata).
Nota: Tutti i dati restituiti da una chiamata a method.invoke () verrà inviato al client come dati JSON e possono essere usate per generare l'intestazione x-toto-HMAC per la verifica. Questo può causare problemi con metodi asincroni. Se method.invoke () restituisce None, una risposta non sarà automaticamente inviato al cliente e verrà generata alcuna intestazione x-toto-HMAC.
richieste
Metodi non autenticata:
Servizio 1. Chiamare con oggetto JSON in forma: {"metodo": "abc", "parametri":
2. Parse risposta JSON.
Account di creazione:
1. Chiamare il metodo account.create con {"user_id":
2. Verificare che i Base64 codificati HMAC-SHA1 del corpo di risposta con
3. Analizzare risposta JSON.
4. Leggere e memorizzare session_id dall'oggetto risposta.
Login:
1. Chiamare il metodo account.login con {"user_id":
2. Verificare che i Base64 codificati HMAC-SHA1 del corpo di risposta con
3. Analizzare risposta JSON.
4. Leggere e memorizzare session_id dall'oggetto risposta.
Metodi autenticati:
1. Accesso (vedi-sopra).
2. servizio di chiamata con l'oggetto JSON in forma: {"metodo": "abc", "parametri":
3. Verificare che le Base64 codificati HMAC-SHA1 del corpo di risposta con
4. Analizzare la risposta JSON.
Nota: Queste istruzioni presuppongono che method.invoke () restituisce un oggetto per essere serializzato e inviato al client. I metodi che restituiscono Nessuno può essere utilizzato l'invio di tutti i dati e devono essere trattati di conseguenza.
Eventi
A volte può essere necessario inviare gli eventi da una richiesta ad un altro. Toto.events.EventManager di Toto rende questo facile.
Per inviare un uso evento EventManager.instance (). Trasmettere ('nomeevento', args). EventManager usa il modulo cPickle di Python per la serializzazione in modo da poter passare nulla cPickle può gestire come args.
Per ricevere un evento, è necessario registrare un gestore con EventManager.instance (). Register_handler ('eventName', handler). handler è una funzione che prende uno dei parametri e sarà chiamato con args quando il EventManager invia un evento con 'nomeevento'. Eventi di Toto sono stati progettati principalmente per essere combinato con il supporto del tornado per le richieste non-blocking. Vedere il modello "chiacchierata" per un esempio.
Sistema di evento di Toto supporta l'invio di eventi tra più istanze, sia sulla stessa macchina e in un sistema distribuito. Eseguire il server con --help per ulteriori opzioni di configurazione
Daemonization
Il server Toto può essere eseguito come demone passando l'argomento --daemon = inizio. Per interrompere tutti i processi in esecuzione passano --daemon = arresto. Questo fermerà tutti i processi che condividono il formato del file pid specificato (toto.pid default). I --processes = opzione potranno essere utilizzati per specificare il numero di istanze di server per l'esecuzione. Più istanze saranno eseguiti su porte sequenziali con partenza dal porto specificato da --port. Se viene utilizzato 0 come argomento per --processes, Toto eseguirà un processo per cpu come rilevato dal modulo multiprocessing di Python. Ulteriori opzioni daemonization possono essere visualizzati da --help.
Clienti
Per aiutarvi a iniziare, librerie client JavaScript e iOS sono in sviluppo presso https://github.com/JeremyOT/TotoClient-JS e https://github.com/JeremyOT/TotoClient-iOS rispettivamente.
Caratteristiche :
- Utilizza JSON per il consumo facile dai clienti su qualsiasi piattaforma
- Facile aggiungere nuovi metodi
- autenticazione semplice costruita con verifica HMAC-SHA1 per le richieste autenticate
- la persistenza dello stato di sessione per le richieste autenticate
- Sessions memorizzati nel database per semplificare scala tra i server
Requisiti :
- Python
I commenti non trovato