Ruby opt_字段不适用于Asana API,但url适用于Asana explorer

Ruby opt_字段不适用于Asana API,但url适用于Asana explorer,ruby,asana,Ruby,Asana,我从hello world示例开始使用Ruby。你好,世界工作发现。我正在努力让这个开始工作: GET /projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now 它的工作原理与AsanaAPI浏览器中的预期完全相同 我在代码中使用了相同的URI: uri = URI.parse("https://app.asana.com/api/1

我从hello world示例开始使用Ruby。你好,世界工作发现。我正在努力让这个开始工作:

GET /projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now
它的工作原理与AsanaAPI浏览器中的预期完全相同

我在代码中使用了相同的URI:

uri = URI.parse("https://app.asana.com/api/1.0/projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now")
它仍然正确地返回ID和Name,但这不是我想要的

我不明白为什么它在资源管理器中工作,但在GET请求中不工作。我使用的是个人令牌,而探险者使用的是OAuth。 在此代码之前已正确设置我的个人令牌。我可以创建任务,获取项目,获取任务。我只是无法在这个查询中找到更多像API explorer这样的字段

新增代码:

uri = URI.parse("https://app.asana.com/api/1.0/projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER

# set up the request
header = {
  "Content-Type" => "application/json"
  }

req = Net::HTTP::Get.new(uri.path, header)
req.basic_auth(personal_access_token, '')
res = http.start { |http| http.request(req) }
body = JSON.parse(res.body)
puts "projects: #{body['data']}"

这里没有足够的代码来知道出了什么问题。听起来您的代码在某种程度上正常工作,但使用个人令牌与使用OAuth之间可能有一些不同。根据报告:

访问API时,个人访问令牌的使用应与OAuth访问令牌类似,并将其传递到授权标头中:

curl -H "Authorization: Bearer ACCESS_TOKEN" https://app.asana.com/api/1.0/users/me
因此,除了URL之外,还需要使用正确的标题。我不确定您使用的HTTP库是什么,但以下是我将如何使用它:

如果将您的个人访问令牌放入access_token环境变量中,则应正确验证您的请求


尽管如此,如果你能得到所有的字段,似乎还缺少一些东西。可能您的个人访问令牌与您的OAuth访问令牌关联的帐户不同?检查?

更新的结果以包含几乎所有的代码可能会有所帮助,如果这有帮助的话。看起来应该是直截了当的。结果是JSON,仅包含任务id和名称字段。
require 'uri'
require 'httparty'
uri = URI.parse("https://app.asana.com/api/1.0/projects/192372431230306/tasks?opt_fields=id,assignee,due_on,name,notes&limit=10&completed_since=now")

task = HTTParty.get(uri,
                    :headers =>
                    {'Authorization' => "Bearer ${ENV[ACCESS_TOKEN]}"}
                   ).parsed_response