我不确定这是否值得一提,但在解析 gem 的 create_topic 和 edit_post 方法的响应时,我今天卡在了这里。
create_topic 调用 post 方法。该方法返回 response.body 或引发 DiscourseApi::Error:
def post(path, params = {})
response = request(:post, path, params)
case response.status
when 200, 201, 204
response.body
else
raise DiscourseApi::Error, response.body
end
end
edit_post 调用 put 方法。该方法返回一个 Faraday::Env 对象:
#<struct Faraday::Env method=:put, request_body="post%5Braw%5D=It%27s+a+minor+thing%2C+but+it+comes+up+a+lot.+I%27ll+do+some+tests....
对于使用该 gem 的应用程序来说,这意味着 post 和 put 请求返回的响应需要区别处理。要处理 put 请求,发出请求的应用程序必须执行类似 api gem 为 post 请求所做的操作:
def update_topic_from_note(markdown:, post_id:)
response = @client.edit_post(post_id, markdown)
case response.status
when 200, 201, 204
response.body
else
# ...
这也不是世界末日,但确实令人惊讶。我知道 API 代码的更改很难做。