Les méthodes API gem ont des structures de réponse incohérentes

Je ne suis pas sûr que cela vaille la peine d’être mentionné, mais je me suis bloqué dessus aujourd’hui lors de l’analyse des réponses des méthodes create_topic et edit_post du gem.

create_topic appelle la méthode post. Cette méthode retourne soit response.body, soit lève une 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 appelle la méthode put. Cette méthode retourne un objet 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....

Pour les applications utilisant le gem, cela signifie que les réponses retournées par les requêtes post et put doivent être traitées différemment. Pour traiter une requête put, l’application qui effectue la requête doit faire quelque chose de similaire à ce que fait le gem d’API pour les requêtes 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
    # ...

Ce n’est pas la fin du monde, mais c’était surprenant. Je sais qu’il est difficile d’apporter des modifications au code de l’API.

2 « J'aime »