API-Gem-Methoden haben inkonsistente Antwortstrukturen

Ich bin mir nicht sicher, ob das erwähnenswert ist, aber ich bin heute beim Parsen von Antworten von den create_topic- und edit_post-Methoden des Gems hängen geblieben.

create_topic ruft die post-Methode auf. Diese Methode gibt entweder response.body zurück oder löst einen DiscourseApi::Error aus:

    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 ruft die put-Methode auf. Diese Methode gibt ein Faraday::Env-Objekt zurück:

#<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....

Für Anwendungen, die den Gem verwenden, bedeutet dies, dass die von post- und put-Anfragen zurückgegebenen Antworten unterschiedlich behandelt werden müssen. Um eine put-Anfrage zu bearbeiten, muss die Anwendung, die die Anfrage stellt, etwas tun, das dem ähnelt, was der API-Gem für post-Anfragen tut:

  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
    # ...

Es ist nicht das Ende der Welt, aber es war überraschend. Ich weiß, dass es schwierig ist, Änderungen am API-Code vorzunehmen.

2 „Gefällt mir“