Эффективное получение всех выполненных задач

Для приложения мне нужны все недавно выполненные задачи пользователя (в данном случае это последние 7 дней). У меня это работает сейчас, но это крайне неэффективно, и в справочнике по API я не вижу лучшего способа сделать это.

В настоящее время мне нужно получить текущего пользователя (https://app.asana.com/api/1.0/users/me), переберите рабочие области пользователя и вызовите https://app.asana.com/api/1.0/tasks?workspace=workspaceId&assignee=me&completed_since=sevenDaysAgo для каждой рабочей области. Это дает мне компактные данные о задачах для всех завершенных задач для всех проектов в этой рабочей области, а также все незавершенные задачи для всех проектов в этой рабочей области. Поскольку мне нужны только завершенные задачи, мне нужно отфильтровать незавершенные задачи из этого списка. Однако компактные данные задачи не включают свойство «завершено». Чтобы выяснить, завершена задача или нет, мне нужно получить полные данные задачи, что означает вызов https://app.asana.com/api/1.0/tasks/taskId для каждой задачи.

Скажем, у меня есть два рабочих пространства, в каждом из которых есть по три проекта, и каждый проект имеет в среднем 100 завершенных задач и 200 незавершенных задач. Это означает, что 1 + 2 + (2 * 3) + (2 * 3 * 300) = колоссальные 1809 запросов API. Помимо того, что это очень медленно, это также большой успех на серверах Asana.

Есть ли способ сделать это более эффективно? Только получение компактных данных о выполненных задачах будет иметь большое значение. Было бы еще лучше получить это за один вызов: как, например, сама Asana делает это в «Мои задачи»> «Просмотр: недавно выполненные задачи»?


person Bas    schedule 15.01.2016    source источник


Ответы (1)


(здесь разработчик Asana) Рассматривали ли вы возможность использования ?opt_fields=completed в своем первоначальном запросе GET /tasks? Вы можете специально запросить любые поля, которые вы хотите, см. документы по параметрам ввода/вывода и, конечно же, см. документы задач для справки по доступным полям. Поэтому, если вам действительно нужно только имя (например), вы можете запросить ?opt_fields=completed,name.

К сожалению, вам нужно будет отфильтровать незавершенные задачи на вашей стороне.

person agnoster    schedule 15.01.2016
comment
Это круто, я полностью пропустил параметр opt_fields. Это мгновенно решает мою проблему, теперь мне вообще больше не нужно вызывать /tasks/taskId: я просто выбираю все нужные мне поля в вызове /tasks?workspace=. Это уменьшает количество вызовов до 1 для вызова /me и 1 для каждой рабочей области, что совсем неплохо. Кроме того, задачи теперь загружаются молниеносно, а не по каплям. Спасибо! - person Bas; 15.01.2016