0Pricing
Clojure Functional Programming & JVM Backend Development · Lektion

Anfragen und Antworten verarbeiten

Beherrschen Sie das Parsen eingehender Anfragedaten und das Erstellen passender HTTP-Antworten, einschließlich JSON und HTML

Anfragen und Antworten verarbeiten ist eine kostenlose Clojure Functional Programming & JVM Backend Development-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Clojure Functional Programming & JVM Backend Development-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Clojure Functional Programming & JVM Backend Development-Kurs umfasst insgesamt 4 Lektionen.

Teile dieser Lektion wurden noch nicht übersetzt und werden auf Englisch angezeigt.

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., 200 for OK, 404 for 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-Type header.

These are fundamental skills for building any web application with Ring and Compojure!

Häufig gestellte Fragen

Ist die Lektion „Anfragen und Antworten verarbeiten“ kostenlos?

Ja — der vollständige Text von „Anfragen und Antworten verarbeiten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Clojure Functional Programming & JVM Backend Development-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Clojure Functional Programming & JVM Backend Development-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Anfragen und Antworten verarbeiten“?

Beherrschen Sie das Parsen eingehender Anfragedaten und das Erstellen passender HTTP-Antworten, einschließlich JSON und HTML Du übst Clojure Functional Programming & JVM Backend Development mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Clojure Functional Programming & JVM Backend Development zu starten?

Keine Vorkenntnisse erforderlich. Clojure Functional Programming & JVM Backend Development auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Anfragen und Antworten verarbeiten“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Clojure Functional Programming & JVM Backend Development-Lektion Code schreiben und ausführen?

Ja. Jede Clojure Functional Programming & JVM Backend Development-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einführung in Ring und HTTP-Grundlagen
  2. Routing mit Compojure
  3. Anfragen und Antworten verarbeiten
  4. Ring-Middleware im Detail
← Zurück zu Clojure Functional Programming & JVM Backend Development