Mar*_*old 11 rest flask wtforms python-requests flask-restful
我有一个Web应用程序,它由位于同一服务器上的REST API支持.假设我有一个Task可访问的资源/api/task/<task_id>和一个网页/create-task,它基本上只是一个创建任务的表单.有几种方法可以做到:
a)使用Javascript与REST API通信(不想这样做)
b)直接在数据库中创建对象
@app.route('/create-task', methods=['POST'])
def create_task(self):
# create an object
try:
task = Task(request.form)
except:
# handle errors and put them to form
pass
# save it into db
task.save()
Run Code Online (Sandbox Code Playgroud)
c)使用requests库调用REST API
@app.route('/create-task', methods=['POST'])
def create_task(self):
# send request to REST API
r = requests.post(url_for('api.task', _external=True), json=request.form.data)
if r.status_code != 200:
# handle errors and put them to form
pass
Run Code Online (Sandbox Code Playgroud)
您认为哪种选择是最佳做法?考虑与错误处理和表单相关的问题.
有关的奖金问题flask-restful.假设我已经建立了一个使用flask-restful构建的工作API,并希望使用选项b).我可以以某种方式使用TaskResource.post这样做吗?
如果可能的话,最好的办法是直接通过Python调用API代码,而无需通过HTTP和REST.这将避免HTTP请求的开销和可能的故障点.我不熟悉flask-restful所以我不知道这有多容易." 调用flask restful API资源方法 " 中的答案似乎建议只需将API中的公共代码提取到可以在API和应用程序中使用的库,这也可以使用.
除此之外:
A)如果API不需要身份验证或不是"秘密",使用Javascript/AJAX可能不会太糟糕.您必须在Javascript中编写表单错误处理,但如果REST API调用返回错误,您可以避免对/ create-task的HTTP请求.
C)比B)好,因为破坏事物的可能性较小.只有REST API负责创建任务,而您所做的只是传递参数.问题是你需要从API中读出任何错误响应并在表单处理程序中重写它们,这是一项愚蠢的工作.此外,这会在生成适当的URL url_for('api.task'),能够访问生产服务器上的URL等方面造成脆弱性.
B)因为复制粘贴代码不好而导致错误.您现在有两个创建任务的地方,如果更改了某些内容,您必须记住修改它们(例如数据库实现细节).这最终会破裂并回来伤害你.
| 归档时间: |
|
| 查看次数: |
9596 次 |
| 最近记录: |