Syro

8. The response object

8. La réponse objet

We have been using res.text in all the examples, and now we will discover what other methods we can call on res.

Nous avons utilisé res.text dans tous les exemples, et maintenant nous allons découvrir quelles autres méthodes nous pouvons appeler dans res.

Status codes

Codes des status

We can get or set the status code of the response by using the accessor res.status:

Nous pouvons obtenir ou mettre en place les codes des statuts de la réponse en utilisant l'accesseur res.status:

  require "syro"

  App = Syro.new do
    get do
      res.status = 501
      res.text "Not implemented yet!"
    end
  end

  env = do
    "REQUEST_METHOD" => "GET",
    "PATH_INFO"      => "/",
  }

  p App.call(env)

Output:

Résultat :

  [501,
   {"Content-Length"=>"20"},
   ["Not implemented yet!"]]

Content type

Type de contenu

You may have noticed the Content-Type header included in all the responses. So far, its value has always been set to "text/plain".

Vous avez sûrement remarqué l'entête Content-Type inclus dans toutes les réponses. Jusqu'ici, sa valeur a toujours été "text/plain".

The res.text method not only writes the body, but also sets the "Content-Type" and "Content-Length" headers.

La méthode res.text non seulement écrit le corps, mais configure en plus les entêtes de "Content-Type" et de "Content-Length".

Here are some alternative methods for writing the response body:

Voici quelques méthodes alternatives pour écrire la réponse du corps :

  res.write "Hello"

The res.write method doesn't alter the "Content-Type" header.

La méthode res.write n'altère pas l'entête "Content-Type".

  res.html "Hello"

The res.html method sets the "Content-Type" header to "text/html".

La méthode res.html configure l'entête "Content-Type" à "text/html".

  res.json "Hello"

The res.json method sets the "Content-Type" header to "application/json".

La méthode res.json configure l'entête "Content-Type" à "application/json".

Note that aside from writing the response body and setting the value for the Content-Type header, no encoding or serialization takes place. If you want to return a JSON encoded response, make sure to encode the objects yourself (i.e., res.json JSON.dump(...)).

Notez que, mis à part l'écriture de la réponse du corps et la configuration de la valeur pour l'entête Content-Type, aucun encodage ou sérialisation n'aura lieu. Si vous voulez retourner une réponse encodée JSON, assurez-vous d'encoder vous mêmes les objets (ex. res.json JSON.dump(...)).

Headers

Entêtes

We can configure response headers with the res.headers hash:

Nous pouvons configurer des entêtes de réponse avec le hash res.headers :

  require "syro"

  App = Syro.new do
    get do
      res.headers["Content-Type"] = "text/markdown"
      res.write "hello _you_"
    end
  end

  env = {
    "REQUEST_METHOD" => "GET",
    "PATH_INFO"      => "/",
  }

  p App.call(env)

Output:

Résultat :

  [200,
   {"Content-Type"=>"text/markdown",
    "Content-Length"=>"11"},
   ["hello _you_"]]

Redirects

Redirections

You can call res.redirect to take the visitor to a different URL:

Vous pouvez appeler res.redirect pour amener le visiteur vers une URL différente :

  require "syro"

  App = Syro.new do
    get do
      res.redirect "/foo"
    end

    on "foo" do
      get do
        res.text "GET /foo"
      end
    end
  end

  env = {
    "REQUEST_METHOD" => "GET",
    "PATH_INFO"      => "/",
  }

  p App.call(env)

Output:

Résultat :

  [302,
   {"Location"=>"/foo"},
   []]

Our little application is returning a redirection, which tells browsers to go to a different URL. Soon we will be able to see this result in the browser and it will all make sense.

Notre petite application retournera une redirection qui dira au navigateur d'aller vers une URL différente. Bientôt, nous serons capables de voir ce résultat dans le navigateur et tout cela aura du sens.

Cookies

Manage cookies with res.set_cookie and res.delete_cookie:

Gérez les cookies avec res.set_cookie et res.delete_cookie:

  require "syro"

  App = Syro.new do
    get do
      res.set_cookie("foo", "bar")
      res.redirect "/admin"
    end

    on "admin" do
      get do
        res.delete_cookie("foo")
        res.text req.cookies["foo"]
      end
    end
  end

  env = {
    "REQUEST_METHOD" => "GET",
    "PATH_INFO"      => "/",
  }

  p App.call(env)

Output:

Résultat :

  [302,
   {"Set-Cookie"=>"foo=bar",
    "Location"=>"/admin"},
   []]

We got a redirection and a cookie header. We can now simulate what the browser will do in order to follow the redirect. Append the code below:

Nous avons obtenu une redirection et un entête cookie. Maintenant nous pouvons simuler ce que le navigateur ferait pour suivre la redirection. Ajoutez le code ci-dessous :

  env = {
    "REQUEST_METHOD" => "GET",
    "PATH_INFO"      => "/admin",
    "HTTP_COOKIE"    => "foo=bar",
  }

  p App.call(env)

Output:

Résultat :

  [200,
   {"Set-Cookie"=>"foo=; ...",
    "Content-Length"=>"3"},
    "Content-Type"=>"text/plain"},
   ["bar"]]

Part of Set-Cookie was ommited in the example, but it has to do with expiring the foo cookie.

Une partie du Set-Cookie a été omise dans l'exemple, mais ce code sert à dire que le cookie foo est expiré.


Prev | Index | Next

Précédent | Sommaire | Suivant