Toto er en lille ramme, som skal fremskynde API server udvikling. Den er bygget oven på Tornado og kan i øjeblikket bruger enten MySQL eller MongoDB som underlag database.
Installation
Den enkleste måde at installere Toto er med pip. Du skal blot køre pip installere -e git + git: //github.com/JeremyOT/Toto.git#egg=Toto at installere den nyeste version af Toto-modulet på din maskine.
Anvendelse
Kom godt i gang med Toto er nemt, alt du behøver at gøre, er at lave en ny instans af toto.TotoServer og kalder run (). Toto brug for en rod modul skal bruges til metode opslag. Som standard, vil en TotoServer kigge efter et modul kaldet metoder. Den method_module parameter kan bruges til at angive et andet modul ved navn.
Konfiguration
Som standard er Toto konfigureret til at køre på port 8888 og oprette forbindelse til en MongoDB server, der kører på localhost. Konfiguration kan udføres på tre måder med hver tvingende det sidste:
1. Ved at føre indstillinger navngivne parametre til TotoServer konstruktøren.
2. Gennem en konfigurationsfil ved at føre stien til config fil som den første parameter til TotoServer konstruktør.
3. kommandolinjeparametre (--option = 'strengværdi "--option = 1234)
Kombinere konfigurationsmetoder kan være nyttige, når debugging. Kør dit script med --help for at se en komplet liste over tilgængelige parametre.
Metoder
Metoder der henvises til ved navn i hver enkelt anmodning. a.b.c (eller a / b / c) kort til methods.a.b.c. Hvis du vil tilføje nye metoder, tilføje moduler og pakker de metoder (eller specificeret) pakke (se konto pakke til reference), og sikre, at hver konverterbare modul definerer påberåbe (Handler, parametre) hvor handleren er TotoHandler (underklasse af tornado.web. RequestHandler) håndtering af aktuelle anmodning.
handler.connection.db giver direkte adgang til databasen, der anvendes af rammen sessioner og regnskaber.
handler.session giver adgang til den aktuelle session eller Ingen, hvis ikke godkendt. Tilgængelige egenskaber:
- Session.user_id - den aktuelle bruger-id
- Session.expires - den unix tidsstempel når sessionen udløber
- Session.session_id - den aktuelle session id
- Session.state - en python dict indeholder den aktuelle tilstand, skal du ringe session.save_state () til at fortsætte eventuelle ændringer
For at håndhæve godkendelse for enhver metode, dekorere påberåbelse () funktionen med @ toto.invocation.authenticated. Uautoriserede forsøg på at kalde bekræftet metoder vil returnere en ikke autoriseret fejl.
Nødvendige parametre kan angives ved at dekorere en påberåbelse () funktion med @ toto.invocation.requires (param1, param2, ...).
Metode moduler kan drage fordel af Tornado ikke-blokerende egenskaber ved at dekorere en påberåbelse () funktion med @ toto.invocation.asynchronous. Når den asynkrone operation er færdig, skal du ringe handler.finish () for at afslutte anmodningen. Data kan sendes til kunden med handler.write () og handler.flush (). Eventuelt kan moduler implementere on_connection_close () for at rydde op nogen ressourcer, hvis kunden lukker forbindelsen. Se RequestHandler.on_connection_close () i Tornado dokumentation for mere information.
Det er vigtigt at huske, at Tornado kræver, at alle opkald til at skrive (), flush () og finish () udføres på den røde tråd. Du kan planlægge en funktion til at køre på den røde tråd med IOLoop.instance (). Add_callback (tilbagekald).
Bemærk: Alle data tilbage fra et kald til method.invoke () vil blive sendt til klienten som JSON data og anvendes til at generere x-toto-HMAC header til kontrol. Dette kan medføre problemer med asynkrone metoder. Hvis method.invoke () returnerer Ingen, en reaktion, vil ikke automatisk blive sendt til kunden, og NOx-toto-HMAC header genereres.
Anmodning
Ikke bekræftet metoder:
1. Ring service med JSON objekt i form: {"metode": "ABC", "parametre":
2. Parse svar JSON.
Konto Creation:
1. Ring account.create metode med {"user_id":
2. Kontroller, at base64 kodet HMAC-SHA1 af svaret krop med
3. Parse svar JSON.
4. Læs og opbevar session_id fra objektet respons.
Login:
1. Ring account.login metode med {"user_id":
2. Kontroller, at base64 kodet HMAC-SHA1 af svaret krop med
3. Parse svar JSON.
4. Læs og opbevar session_id fra objektet respons.
Godkendte metoder:
1. Log ind (se-ovenfor).
2. Ring service med JSON objekt i form: {"metode": "ABC", "parametre":
3. Kontroller, at base64 kodet HMAC-SHA1 af svaret krop med
4. Parse svar JSON.
Bemærk: Denne vejledning forudsætter, at method.invoke () returnerer et objekt, der skal føljeton og sendes til kunden. Metoder, der returnerer Ingen kan bruges på send data og skal behandles i overensstemmelse hermed.
Arrangementer
Nogle gange kan det være nødvendigt at sende begivenhederne fra en anmodning til en anden. Totos toto.events.EventManager gør det nemt.
For at sende en brug begivenhed EventManager.instance (). Sende ("eventName«, args). EventManager bruger Pythons cPickle modul til serialisering, så du kan passere noget cPickle kan håndtere som args.
For at modtage en begivenhed, skal du registrere en handler med EventManager.instance (). Register_handler (»eventName«, handler). handleren er en funktion, der tager én parametre og vil blive kaldt med args når EventManager sender en begivenhed med "eventName«. Toto begivenheder var primært designet til at blive kombineret med tornado støtte til ikke-blokerende anmodninger. Se "chat" skabelon for et eksempel.
Toto event-system understøtter afsendelse arrangementer på tværs af flere forekomster både på den samme maskine og i et distribueret system. Kør din server med --help for flere konfigurationsmuligheder
Daemonization
Den Toto-serveren kan køre som en dæmon ved at føre det argument --daemon = start. For at stoppe eventuelle kørende processer passere --daemon = stop. Dette vil stoppe alle processer, som deler den angivne pid filformat (standard toto.pid). De --processes = option kan anvendes til at angive antallet af serversubsystemer til at køre. Flere tilfælde vil blive kørt på sekventielle porte, der starter ved havnen angivet af --port. Hvis 0 bruges som argument for at --processes vil Toto køre én proces pr cpu som påvist ved Pythons multiprocessing modul. Yderligere daemonization muligheder kan ses fra --help.
Klienter
For at hjælpe dig i gang, JavaScript og iOS klient biblioteker er under udvikling på https://github.com/JeremyOT/TotoClient-JS og https://github.com/JeremyOT/TotoClient-iOS hhv.
Funktioner :
- Bruger JSON til nem forbrug af klienter på alle platforme
- Let at tilføje nye metoder
- Enkel autentificering indbygget med HMAC-SHA1 verifikation for bekræftede anmodninger
- Session state vedholdenhed for bekræftede anmodninger
- Sessions gemt i databasen for at forenkle skalering tværs servere
Krav :
- Python
Kommentarer ikke fundet