API前端架构

1 投票
1 回答
1453 浏览
提问于 2025-04-17 07:23

我想建立一个网站,这个网站是一个API的前端。简单来说,前端会接收用户输入,然后用这些输入去查询API,获取结果。当结果获取到后,就会显示出来。这一切都是异步进行的。

我有几个问题:

  1. 我需要用像Celery这样的工具来在后台处理API查询吗?
  2. 假设我使用AJAX(我会用),那么处理用户输入和获取查询结果的URL是不同的吗?
  3. 我需要用像长轮询这样的方式来用JavaScript获取和显示结果吗?
  4. 考虑到获取的结果可以进一步过滤,我在考虑使用memcached作为存储,这样合适吗?

如果我遗漏了什么,或者有更好的方法,我很乐意听听。

补充说明:我意识到我之前的描述不太准确,所以我会重新表述一下。基本上,我的网站是基于一个我无法控制的API。因此,有第三方API,我的应用程序使用Django作为后端,前端则是JavaScript、CSS和HTML。

这就是我引入Celery的原因。在我看来,应用程序的流程是这样的:用户在我的网页上输入所需的信息,当用户提交数据时,这些数据会异步发送到我的后端。然后,Celery会用来向第三方API发送请求并获取数据。与此同时,我的前端会不断向后端请求数据,并在收到数据后开始显示。

1 个回答

2

你这里有些地方没理解清楚。根据你的需求,我猜测你想做一个前端(就是HTML加JavaScript),用来向一个(RESTful)API发请求,这个API其实就是一个能“说”HTTP的服务器。

所以,你的API请求是和你的服务器有关的,也就是和Django在Apache上运行,或者用Tornado等其他框架。Celery不能直接处理你的请求,但它可以用来做一些后台任务。

在客户端,你的AJAX调用会触发一些服务器端的视图,这些视图会对应一些URL。你怎么定义这些URL是由你来决定的。可以看看一些流行的API(比如Twitter),了解它们是怎么结构化的。

长轮询跟你的“业务”逻辑有关,它定义了如何把数据呈现给客户端。

另外,缓存跟你服务器的性能有关,建议你使用像memcached或redis这样的工具。

编辑(补充说明):你的做法没有问题。Celery是用来从外部API获取数据的合适工具,然后把结果保存到数据库,当然还可以用一些缓存。之后再从客户端进行轮询来获取结果。不过,还有一种更优雅、不阻塞的方式来做到这一点。你可以用Tornado从外部API获取数据,当数据准备好后再发送给客户端。这样就不需要Celery,也不需要长轮询。这里有一个很棒的代码示例 在这里

撰写回答