Gestion des requêtes et des réponses
Maîtrisez l'analyse des données des requêtes entrantes et la construction de réponses HTTP appropriées, notamment en JSON et en HTML
Gestion des requêtes et des réponses est une leçon Clojure Functional Programming & JVM Backend Development gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Clojure Functional Programming & JVM Backend Development, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Clojure Functional Programming & JVM Backend Development comprend 4 leçons au total.
Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.
Handling Requests & Responses
In web development, your application constantly handles incoming requests from clients and sends back appropriate responses. This lesson teaches you how to read data from a client's request and construct different types of responses, like HTML and JSON, using Clojure's Ring.
Understanding the Ring Request Map
When a request hits your Clojure application, Ring transforms it into a standard Clojure map, often called the request map. This map contains all details about the incoming request, such as:
:uri: The path of the request (e.g.,"/users"):request-method: The HTTP method (e.g.,:get,:post):headers: A map of all HTTP headers:query-params: A map of URL query parameters:body: The request body, if any
Accessing Query & Form Parameters
Clients often send data via URL query parameters (e.g., /search?q=clojure) or HTML form parameters. Ring provides these parsed in the :query-params and :form-params keys of the request map, respectively. You can access them like any other map entry.
Code: Query Parameter Demo
Try running this example to see how to extract a query parameter. We'll simulate a request map for a handler function.
(ns coddykit.core
(:require [ring.util.response :refer [response]]))
(defn greet-handler [request]
(let [name (get-in request [:query-params "name"] "Guest")]
(response (str "Hello, " name "!"))))
(defn -main []
(let [mock-request {:query-params {"name" "Coddy"}}]
(println "Simulating request with name 'Coddy':")
(let [res (greet-handler mock-request)]
(println "Status:" (:status res))
(println "Body:" (:body res))))
(let [mock-request-no-name {:query-params {}}]
(println "\nSimulating request with no name:")
(let [res (greet-handler mock-request-no-name)]
(println "Status:" (:status res))
(println "Body:" (:body res))))Reading the Request Body
When clients send data in the request body (e.g., for POST or PUT requests), this data is available in the :body key of the request map. For common formats like JSON, you'll typically use a Ring middleware to parse the raw body into a Clojure map automatically. Without middleware, :body contains an InputStream.
Building Your Response Map
After processing a request, your handler function must return a response map. This map tells Ring how to construct the HTTP response sent back to the client. A minimal response map needs:
:status: The HTTP status code (e.g.,200for OK,404for Not Found):headers: A map of HTTP headers (e.g.,{"Content-Type" "text/html"}):body: The actual content to send back (e.g., HTML string, JSON string)
Responding with HTML
To send an HTML page, your response map's :body should be an HTML string, and the "Content-Type" header must be set to "text/html". Ring's response helper function is a great starting point, and header helps add headers.
Code: HTML Response Demo
Here's how to create a simple handler that responds with an HTML page. Note the use of header to set the correct content type.
(ns coddykit.core
(:require [ring.util.response :refer [response header]]))
(defn html-page-handler [request]
(-> (response "<h1>Welcome to CoddyKit!</h1><p>This is an HTML page.</p>")
(header "Content-Type" "text/html")))
(defn -main []
(let [mock-request {}]
(println "Simulating request for HTML page:")
(let [res (html-page-handler mock-request)]
(println "Status:" (:status res))
(println "Headers:" (:headers res))
(println "Body:" (:body res)))))Responding with JSON
For API endpoints, you'll often send data back as JSON. This requires setting the "Content-Type" header to "application/json" and ensuring your :body contains a valid JSON string. You'll typically use a library like clojure.data.json or cheshire to convert Clojure data structures into JSON strings.
Code: JSON Response Demo
This example shows how to send a JSON response. We use clojure.data.json to convert a Clojure map to a JSON string.
(ns coddykit.core
(:require [ring.util.response :refer [response header]]
[clojure.data.json :as json]))
(defn json-data-handler [request]
(let [data {:status "success" :message "Data received!"}]
(-> (response (json/write-str data))
(header "Content-Type" "application/json"))))
(defn -main []
(let [mock-request {}]
(println "Simulating request for JSON data:")
(let [res (json-data-handler mock-request)]
(println "Status:" (:status res))
(println "Headers:" (:headers res))
(println "Body:" (:body res)))))Quick Check: Response Structure
You're building an API and need to send a successful response with a JSON object {"message": "Item created"}. Which of the following correctly represents the Ring response map?
Recap: Requests & Responses
You've learned how to handle the core of web interactions in Clojure! We covered:
- The structure of the Ring request map and how to access its data.
- Extracting query and form parameters from requests.
- Understanding how request bodies (like JSON) are handled.
- Constructing Ring response maps with
:status,:headers, and:body. - Sending back both HTML and JSON content by setting the appropriate
Content-Typeheader.
These are fundamental skills for building any web application with Ring and Compojure!
Questions Fréquemment Posées
La leçon « Gestion des requêtes et des réponses » est-elle gratuite ?
Oui — le texte complet de « Gestion des requêtes et des réponses » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Clojure Functional Programming & JVM Backend Development, passe à CoddyKit PRO. Le cours Clojure Functional Programming & JVM Backend Development comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Gestion des requêtes et des réponses » ?
Maîtrisez l'analyse des données des requêtes entrantes et la construction de réponses HTTP appropriées, notamment en JSON et en HTML Tu pratiques Clojure Functional Programming & JVM Backend Development avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Clojure Functional Programming & JVM Backend Development ?
Aucune expérience préalable n'est requise. Clojure Functional Programming & JVM Backend Development sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Gestion des requêtes et des réponses » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Clojure Functional Programming & JVM Backend Development ?
Oui. Chaque leçon Clojure Functional Programming & JVM Backend Development inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Introduction à Ring et aux bases de HTTP
- Routage avec Compojure
- Gestion des requêtes et des réponses
- Les intergiciels Ring en profondeur