gpt4 book ai didi

rest - 从同一服务器调用 REST API

转载 作者:行者123 更新时间:2023-12-03 15:26:25 25 4
gpt4 key购买 nike

我有一个由位于同一服务器上的 REST API 支持的 Web 应用程序。假设我有一个 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()

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

您认为哪种选择是最佳实践?想想与错误处理和表单相关的问题。

关于 flask-restful 的奖金问题.假设我已经有一个使用 Flask-restful 构建的可用 API,并且想要使用选项 b)。我可以以某种方式使用 TaskResource.post要做到这一点?

最佳答案

如果可能,实际最好的做法是直接通过 Python 调用 API 代码,而无需通过 HTTP 和 REST。这将避免 HTTP 请求的开销和可能的故障点。我不熟悉 flask-restful所以我不知道这有多容易。 “Calling flask restful API resource methods ”中的答案似乎建议仅将 API 中的通用代码提取到您可以在 API 和您的应用程序中使用的库中,这也可以使用。

除此之外:

A) 如果 API 不需要身份验证或不是“ secret ”,则使用 Javascript/AJAX 可能不会太糟糕。您必须在 Javascript 中编写表单错误处理,但如果 R​​EST API 调用返回错误,则可以避免对/create-task 的 HTTP 请求。

C) 比 B) 好,因为事情破裂的可能性较小。只有 REST API 负责创建任务,您所做的只是传递参数。问题是您需要从 API 中读出任何错误响应并在表单处理程序中重新编写它们,这是一项愚蠢的工作。这也造成了无法在 url_for('api.task') 中生成正确 URL 的脆弱性。 ,能够在生产服务器上访问该 URL,等等。

B) 与复制粘贴代码不好的原因相同。您现在有两个创建任务的地方,如果更改某些内容(例如数据库实现细节),您必须记住修改这两个位置。这最终会破裂并回来伤害你。

关于rest - 从同一服务器调用 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26868372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com