API gemメソッドのレスポンス構造に一貫性がない

この件に言及する価値があるかどうかわかりませんが、今日、このgemのcreate_topicおよびedit_postメソッドからの応答を解析しているときに、これにつまずきました。

create_topicpostメソッドを呼び出します。そのメソッドは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_postputメソッドを呼び出します。そのメソッドは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リクエストを処理するために、リクエストを行っているアプリは、postリクエストに対してAPI gemが行っていることのようなことを行う必要があります。

  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コードの変更は難しいことはわかっています。

「いいね!」 2