Funktionel programmering i Clojure og backendudvikling på JVM · Lektion

Håndtering af requests og responses

Bliv fortrolig med at fortolke data fra indkommende requests og konstruere passende HTTP-responses, herunder JSON og HTML.

Lektion 3 af 412 trin

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. 200 for OK og 404 for 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, :headers og :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!

Gratis at komme i gang

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

  1. Introduktion til Ring og HTTP-grundlag
  2. Routing med Compojure
  3. Håndtering af requests og responses
  4. Ring-middleware i dybden
← Tilbage til Funktionel programmering i Clojure og backendudvikling på JVM