我已经开始使用Asana API在我们的CMS中制作自己的任务概述。我在github上找到了一个API,这对我有很大帮助。 正如我在earlier question中提到的,我想为某个用户获取所有任务。我已经设法使用下面的代码执行此操作。
public function user($id)
{
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest')) {
$this->layout = 'ajax';
}
$asana = new Asana(array(
'apiKey' => 'xxxxxxxxxxxxxxxxxxxx'
));
$results = json_decode($asana->getTasksByFilter(array(
'assignee' => $id,
'workspace' => 'xxxxxxxxxx'
)));
if ($asana->responseCode != '200' || is_null($results)) {
throw new \Exception('Error while trying to connect to Asana, response code: ' . $asana->responseCode, 1);
}
$tasks = array();
foreach ($results->data as $task) {
$result = json_decode($asana->getTaskTags($task->id));
$task->tags = $result->data;
$tasks[] = $task;
}
$user = json_decode($asana->getUserInfo($id));
if ($asana->responseCode != '200' || is_null($user)) {
throw new \Exception('Error while trying to connect to Asana, response code: ' . $asana->responseCode, 1);
}
$this->render("tasks", array(
'tasks' => $tasks,
'title' => 'Tasks for '.$user->data->name
));
}
上述工作正常,除了一件事。它比启动Windows Vista机器慢(非常慢:))。如果我包含标签,则在获得所有结果之前最多可能需要60秒。如果我不包括标签,它需要大约5秒,这仍然太长。现在,我希望我不是第一个使用Asana API的人,而且你们中的一些人可能在过去经历过同样的问题。
答案 0 :(得分:1)
API本身肯定会更快,我们有一些关于如何提高响应能力的长期计划,但在近中期,API可能会保持相同的基本速度。
不花费大量时间访问API的诀窍通常是减少您发出的请求数量,并仅请求您需要的数据。有时候,API客户端不会轻易做到这一点,而且我并不熟悉PHP客户端,但我可以举一个例子说明这种方法通常只用普通的HTTP查询。
所以现在你在伪代码中执行以下操作:
GET /tasks?assignee=...&workspace=...
foreach task
GET /task/.../tags
GET /users/...
因此,如果用户有20个任务(并且真正的用户通常有批次超过20个任务 - 如果您只关心不完整和任务在最后完成,比如说,一周,您可以使用?completed_since=<DATE_ONE_WEEK_AGO>
),您提出了22个请求。并且因为它是同步的,所以在开始下一个请求之前,您需要等待几秒钟。
幸运的是,API有一个名为?opt_fields
的参数,允许您指定所需的完全数据。例如:让我们假设对于教学任务,您真正想要的是知道任务ID,任务名称,它拥有的标签及其名称。然后你可以请求:
GET /tasks?assignee=...&workspace=...&opt_fields=name,tags.name
(包含的每个资源始终带有id
字段)
这将允许您在单个HTTP请求中获取您之后的所有数据。 (嗯,用户查找仍然是分开的,但至少只有1个额外请求而不是N)。有关opt_fields的更多信息,请查看Input/Output Options上的文档。
希望有所帮助!