Ich verwende die Klassenbasierten Ansichten in Flask, um eine CRUD-REST-API zu erstellen und die Routen mithilfe von add_url_rule
wie folgt zu registrieren...
class GenericAPI(MethodView):
def get(self, item_group, item_id):
...
def post(self, item_group, item_id):
...
...
api_view = GenericAPI.as_view('apps_api')
app.add_url_rule('/api/', defaults={'item_id': None},
view_func=api_view, methods=['GET',])
app.add_url_rule('/api//',
view_func=api_view, methods=['GET',])
app.add_url_rule('/api//add',
view_func=api_view, methods=['POST',])
app.add_url_rule('/api///edit',
view_func=api_view, methods=['PUT',])
app.add_url_rule('/api///delete',
view_func=api_view, methods=['DELETE',])
Es handelt sich um spezifische Datenbanktabellen basierend auf item_group
und Einträge mit item_id
. Wenn ich also /api/person
haben, werden Einträge für die Personentabelle aufgelistet. Oder wenn ich /api/equipment/2
habe, wird die Zeile mit der ID 2 in der Ausrüstungstabelle abgerufen. Ich habe viele dieser Aufgaben und sie benötigen im Grunde genommen nur CRUD.
Aber was ist, wenn ich meine Routing überschreiben möchte, wenn ich eine andere URL wie /api/analysis/summarize
habe, die theoretisch eine Funktion aufrufen würde, die die Work on-the-fly erledigt. Gibt es eine Möglichkeit, das zu tun?
Oder ist der einzige Weg, meine URLs zu erweitern zu /api/db/person
und /api/db/equipment/2
für eine Reihe von Aktionen und /api/other_work_type
für andere?