2017-02-21 1 views
1

Ich habe eine Webanwendung, für die wir jetzt eine API hinzufügen.Refactoring Web App-Code, wenn API später hinzugefügt wird

Ich bin auf der Suche nach Best Practices, die bei der Arbeit daran zu beachten sind.

Ich erwäge diese Faktoren:

  • DRY: Redundanz vermeiden (soweit möglich). Nehmen Sie zum Beispiel einen Teil des Codes, der eine Formularübergabe behandelt. Es gibt einige Teile, die nur für die Einreichung im Webformular gelten, aber nicht für den entsprechenden API-Postanruf relevant sind. Ich denke daran, den gemeinsamen Code hinter diesen Post-Handlern zu modularisieren. Ich muss hinzufügen, dass die Handler-Klassen für Web Form und API unterschiedlich sind. Ich erstelle eine dritte Klasse, die die üblichen Methoden haben wird. Diese dritte Klasse würde von den beiden Handler-Klassen (zusammen mit ihren anderen Basisklassen, Mehrfachvererbung) geerbt werden.

  • Sollte ich den Code so umgestalten, dass die Methode 'Post' des Web Form-Handlers wiederum die API-Post-Methode aufruft?

Danke.

Antwort

0

Ich denke, dass die Besonderheiten davon von Fall zu Fall erheblich variieren werden, aber ich habe kürzlich so etwas gemacht, und ich werde teilen, was ich herausgefunden habe. Diese

ist, wie ich meine Handler so organisiert, dass ich mich nicht wiederholen:

class MyHandler(webapp2.RequestHandler) 
    class ApiHandler(MyHandler): 
     class Ajax(ApiHandler): # Ajax calls on my website 
     class V0(ApiHandler): # V0 of my REST API for third parties 
    class WebHandler(MyHandler): 
     class HomePage(WebHandler): 
     class OtherPage(WebHandler): 

ich viele Utility-Methoden hinzugefügt, die von den Unterklassen verwendet werden können. Zum Beispiel hat MyHandler eine write_json Methode, weil das an vielen Orten verwendet wird, und ApiHandler hat eine process_json Methode, weil diese nur von APIs verwendet wird.

Ich denke, es ist eine schlechte Idee zu vermeiden, sich selbst zu wiederholen, indem eine Post-Methode eine andere Post-Methode aufrufen. Stattdessen würde ich meinen Code sauberer halten, um das Refactoring auf Modellebene durchzuführen.

+0

Dank Jeff. Haben Sie webapp2 für API-Handler verwendet? Haben Sie keine Endpunkte verwendet? – user362953

+0

Ich verwendete webapp2. Ich denke, ich habe mir Endpoints angeschaut, aber es war so einfach mit webapp2 zu arbeiten, dass ich nicht die Zeit damit verbringen wollte, etwas Neues zu lernen. Ich denke Endpunkte sind eher für Leute, die noch keine App-Engine-App haben (aber ich könnte falsch liegen). –

Verwandte Themen