Ich habe eine Webanwendung, die von der REST-API auf demselben Server unterstützt wird. Angenommen, ich habe eine Task
Ressource auf /api/task/<task_id>
und eine Webseite /create-task
, die im Grunde nur ein Formular zum Erstellen einer Aufgabe ist. Es gibt mehrere Möglichkeiten, dies zu tun:
a) Kommunizieren Sie mit der REST API mit Javascript (wollen Sie das nicht tun)
b) Erstellen Sie ein Objekt direkt in einer Datenbank
%Vor% c) Rufen Sie die REST-API mit requests
library
Welche Option würden Sie als die beste Praxis ansehen? Denken Sie an Probleme im Zusammenhang mit der Fehlerbehandlung und den Formularen.
Bonusfrage bezüglich flask-restful
. Nehmen wir an, ich habe bereits eine funktionierende API mit flash-restful erstellt und möchte die Option b) verwenden. Kann ich irgendwie TaskResource.post
dazu verwenden?
Wenn möglich, wäre es das Beste, den API-Code direkt über Python aufzurufen, ohne HTTP und REST durchlaufen zu müssen. Dies würde den Overhead und mögliche Fehlerpunkte einer HTTP-Anfrage vermeiden. Ich bin nicht vertraut mit flask-restful
, also weiß ich nicht, wie einfach das sein könnte. Die Antwort in " Calling flash restful API-Ressourcenmethoden " scheint nur das Extrahieren zu empfehlen der gemeinsame Code von der API zu einer Bibliothek, die Sie sowohl in der API als auch in Ihrer App verwenden können, was auch funktionieren würde.
Anders als das:
A) mit Javascript / AJAX ist möglicherweise nicht so schlecht, wenn die API keine Authentifizierung erfordert oder nicht als "geheim" gedacht ist. Sie müssten Formularfehlerbehandlung in Javascript schreiben, aber Sie können die HTTP-Anfrage an / create-task vermeiden, wenn der REST-API-Aufruf einen Fehler zurückgibt.
C) ist besser als B), weil es weniger Möglichkeiten gibt, Dinge zu brechen. Nur die REST-API ist für das Erstellen von Aufgaben zuständig, und alles, was Sie tun, besteht darin, Parameter zu übergeben. Das Problem besteht darin, dass Sie alle Fehlerreaktionen aus der API auslesen und sie in Ihrem Formularhandler neu schreiben müssen, was eine doof Arbeit ist. Dies führt auch zu Fragilität, da die URL in url_for('api.task')
korrekt generiert werden kann und auf Produktionsservern usw. zugegriffen werden kann.
B) ist aus dem gleichen Grund schlecht, weil der Copy-Pasting-Code schlecht ist. Sie haben nun zwei Stellen, an denen Aufgaben erstellt werden, und Sie müssen daran denken, beide zu ändern, wenn Sie etwas ändern (z. B. Datenbankimplementierungsdetails). Dies wird schließlich brechen und zurückkommen, um dich zu verletzen.
Tags und Links rest flask python-requests flask-restful wtforms