Menangani Permintaan dan Respons
Kuasai cara mengurai data permintaan masuk dan menyusun respons HTTP yang sesuai, termasuk JSON dan HTML
Menangani Permintaan dan Respons adalah pelajaran Clojure Functional Programming & JVM Backend Development gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Clojure Functional Programming & JVM Backend Development, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Clojure Functional Programming & JVM Backend Development mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
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!
Belajar Clojure dengan tutor AI — gratis
Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.
- Kursus
- 12
- Pelajaran
- 48
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menangani Permintaan dan Respons” gratis?
Ya — teks lengkap “Menangani Permintaan dan Respons” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Clojure Functional Programming & JVM Backend Development, upgrade ke CoddyKit PRO. Kursus Clojure Functional Programming & JVM Backend Development mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menangani Permintaan dan Respons”?
Kuasai cara mengurai data permintaan masuk dan menyusun respons HTTP yang sesuai, termasuk JSON dan HTML Kamu berlatih Clojure Functional Programming & JVM Backend Development dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Clojure Functional Programming & JVM Backend Development?
Tidak diperlukan pengalaman sebelumnya. Clojure Functional Programming & JVM Backend Development di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Menangani Permintaan dan Respons” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Clojure Functional Programming & JVM Backend Development ini?
Ya. Setiap pelajaran Clojure Functional Programming & JVM Backend Development menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pengenalan Ring dan Dasar-Dasar HTTP
- Perutean dengan Compojure
- Menangani Permintaan dan Respons
- Middleware Ring Secara Mendalam