使用 Asana 反应缓慢 API
Slow responses using the Asana API
信息
我已经开始使用 Asana API 在我们的 CMS 中制作我们自己的任务概览。我在 github 上找到了一个 API,这对我有很大帮助。
正如我在 中提到的,我想获取某个用户的所有任务。我已经使用下面的代码成功地做到了这一点。
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,并且你们中的一些人过去可能遇到过同样的问题。
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
的参数,可让您指定所需的 exact 数据。例如:假设对于教学任务,您真正想要的只是知道任务 ID、任务名称、它具有的标签及其名称。然后你可以请求:
GET /tasks?assignee=...&workspace=...&opt_fields=name,tags.name
(包含的每个资源总是带有其 id
字段)
这将允许您在单个 HTTP 请求中获取您想要的所有数据。 (好吧,用户查找仍然是分开的,但至少那只是 1 个额外请求而不是 N 个)。有关 opt_fields 的更多信息,请查看有关 Input/Output Options 的文档。
希望对您有所帮助!
信息
我已经开始使用 Asana API 在我们的 CMS 中制作我们自己的任务概览。我在 github 上找到了一个 API,这对我有很大帮助。
正如我在
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,并且你们中的一些人过去可能遇到过同样的问题。
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
的参数,可让您指定所需的 exact 数据。例如:假设对于教学任务,您真正想要的只是知道任务 ID、任务名称、它具有的标签及其名称。然后你可以请求:
GET /tasks?assignee=...&workspace=...&opt_fields=name,tags.name
(包含的每个资源总是带有其 id
字段)
这将允许您在单个 HTTP 请求中获取您想要的所有数据。 (好吧,用户查找仍然是分开的,但至少那只是 1 个额外请求而不是 N 个)。有关 opt_fields 的更多信息,请查看有关 Input/Output Options 的文档。
希望对您有所帮助!