Håndtering af requests og responses
Bliv fortrolig med at fortolke data fra indkommende requests og konstruere passende HTTP-responses, herunder JSON og HTML.
Håndtering af requests og responses er en gratis Funktionel programmering i Clojure og backendudvikling på JVM-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Funktionel programmering i Clojure og backendudvikling på JVM, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Funktionel programmering i Clojure og backendudvikling på JVM-kurset indeholder 4 lektioner i alt.
Håndtering af anmodninger og svar
Inden for webudvikling håndterer din applikation hele tiden indkommende anmodninger fra klienter og sender passende svar tilbage. Denne lektion lærer dig at læse data fra en klients anmodning og oprette forskellige typer svar, f.eks. HTML og JSON, ved hjælp af Clojures Ring.
Forstå Rings anmodningskort
Når en anmodning rammer din Clojure-applikation, omdanner Ring den til et standard-Clojure-kort, ofte kaldet anmodningskortet. Dette kort indeholder alle oplysninger om den indkommende anmodning, f.eks.:
:uri: Anmodningens sti (f.eks."/users"):request-method: HTTP-metoden (f.eks.:get,:post):headers: Et kort over alle HTTP-headere:query-params: Et kort over URL'ens forespørgselsparametre:body: Anmodningens brødtekst, hvis den findes
Adgang til forespørgsels- og formularparametre
Klienter sender ofte data via URL'ens forespørgselsparametre (f.eks. /search?q=clojure) eller HTML-formularparametre. Ring leverer disse fortolkede i henholdsvis nøglerne :query-params og :form-params i anmodningskortet. Du kan tilgå dem på samme måde som alle andre kortposter.
Kode: Demonstration af forespørgselsparameter
Prøv at køre dette eksempel for at se, hvordan du udtrækker en forespørgselsparameter. Vi simulerer et anmodningskort til en behandlerfunktion.
(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))))Læsning af anmodningens brødtekst
Når klienter sender data i anmodningens brødtekst (f.eks. i POST- eller PUT-anmodninger), er disse data tilgængelige i nøglen :body i anmodningskortet. Til almindelige formater som JSON bruger du typisk en Ring-middleware til automatisk at fortolke den rå brødtekst til et Clojure-kort. Uden middleware indeholder :body en InputStream.
Opbygning af dit svarkort
Efter behandling af en forespørgsel skal din handler-funktion returnere et svarmap. Dette map fortæller Ring, hvordan HTTP-svaret, der sendes tilbage til klienten, skal konstrueres. Et minimalt svarmap skal indeholde:
:status: HTTP-statuskoden (f.eks.200for OK og404for Ikke fundet):headers: Et map med HTTP-headere (f.eks.{"Content-Type" "text/html"}):body: Det faktiske indhold, der skal sendes tilbage (f.eks. en HTML-streng eller JSON-streng)
Svar med HTML
Hvis du vil sende en HTML-side, skal dit svarmaps :body være en HTML-streng, og "Content-Type"-headeren skal sættes til "text/html". Rings hjælpefunktion response er et godt udgangspunkt, og header hjælper med at tilføje headere.
Kode: Demonstration af HTML-svar
Sådan opretter du en simpel handler, der svarer med en HTML-side. Bemærk brugen af header til at angive den korrekte indholdstype.
(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)))))Svar med JSON
For API-endpoints sender du ofte data tilbage som JSON. Det kræver, at "Content-Type"-headeren sættes til "application/json", og at din :body indeholder en gyldig JSON-streng. Du vil typisk bruge et bibliotek som clojure.data.json eller cheshire til at konvertere Clojure-datastrukturer til JSON-strenge.
Kode: Demonstration af JSON-svar
Dette eksempel viser, hvordan du sender et JSON-svar. Vi bruger clojure.data.json til at konvertere et Clojure-map til en JSON-streng.
(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)))))Hurtigt tjek: Svarstruktur
Du bygger et API og skal sende et vellykket svar med JSON-objektet {"message": "Item created"}. Hvilket af følgende repræsenterer Ring-svarmappet korrekt?
Opsamling: Forespørgsler og svar
Du har lært, hvordan du håndterer kernen i webinteraktioner i Clojure! Vi gennemgik:
- Strukturen i Ring-forespørgselsmappet, og hvordan du får adgang til dets data.
- Udpakning af forespørgsels- og formularparametre fra forespørgsler.
- Forståelse af, hvordan forespørgselsindhold som JSON håndteres.
- Konstruktion af Ring-svarmaps med
:status,:headersog:body. - Sådan sender du både HTML- og JSON-indhold tilbage ved at angive den relevante
Content-Type-header.
Det er grundlæggende færdigheder til opbygning af alle webapplikationer med Ring og Compojure!
Lær Clojure med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 12
- Lektioner
- 48
Ofte stillede spørgsmål
Er lektionen “Håndtering af requests og responses” gratis?
Ja — hele teksten til “Håndtering af requests og responses” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Funktionel programmering i Clojure og backendudvikling på JVM-kurset, skal du opgradere til CoddyKit PRO. Funktionel programmering i Clojure og backendudvikling på JVM-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Håndtering af requests og responses”?
Bliv fortrolig med at fortolke data fra indkommende requests og konstruere passende HTTP-responses, herunder JSON og HTML. Du øver dig i Funktionel programmering i Clojure og backendudvikling på JVM med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Funktionel programmering i Clojure og backendudvikling på JVM?
Der kræves ingen tidligere erfaring. Funktionel programmering i Clojure og backendudvikling på JVM på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Håndtering af requests og responses”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Funktionel programmering i Clojure og backendudvikling på JVM-lektion?
Ja. Alle Funktionel programmering i Clojure og backendudvikling på JVM-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Introduktion til Ring og HTTP-grundlag
- Routing med Compojure
- Håndtering af requests og responses
- Ring-middleware i dybden