I metodi gem dell'API hanno strutture di risposta incoerenti

Non sono sicuro se valga la pena menzionarlo, ma mi sono bloccato su questo oggi durante l’analisi delle risposte dei metodi create_topic e edit_post della gemma.

create_topic chiama il metodo post. Quel metodo restituisce response.body o solleva un 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 chiama il metodo put. Quel metodo restituisce un oggetto 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....

Per le applicazioni che utilizzano la gemma, ciò significa che le risposte restituite dalle richieste post e put devono essere gestite in modo diverso. Per gestire una richiesta put, l’app che effettua la richiesta deve fare qualcosa di simile a ciò che la gemma API sta facendo per le richieste 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
    # ...

Non è la fine del mondo, ma è stato sorprendente. So che è difficile apportare modifiche al codice API.

2 Mi Piace