Los métodos de gem de la API tienen estructuras de respuesta inconsistentes

No estoy seguro de si vale la pena mencionarlo, pero me quedé atascado en esto hoy al analizar las respuestas de los métodos create_topic y edit_post de la gema.

create_topic llama al método post. Ese método devuelve response.body o genera una 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 llama al método put. Ese método devuelve un objeto 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....

Para las aplicaciones que usan la gema, significa que las respuestas devueltas de las solicitudes post y put deben manejarse de manera diferente. Para manejar una solicitud put, la aplicación que realiza la solicitud tiene que hacer algo como lo que la gema de API está haciendo para las solicitudes 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
    # ...

No es el fin del mundo, pero fue sorprendente. Sé que es difícil hacer cambios en el código de la API.

2 Me gusta