GoDasturchi
HTTP POST and Custom Requests

HTTP POST and Custom Requests

HTTP POST va maxsus so'rovlar

GET so'rovlari ma'lumotni URL orqali uzatadi, lekin POST so'rovlari ma'lumotni so'rov tanasi (body) orqali yuboradi — odatda JSON formatida, yangi resurs yaratish uchun ishlatiladi. So'rovga qo'shimcha ma'lumot berish uchun sarlavhalar (headers) ham qo'shiladi.

example.go
body := strings.NewReader(`{"name":"Aziz"}`)
req := httptest.NewRequest(http.MethodPost, "/users", body)
req.Header.Set("Content-Type", "application/json")

var reqBody struct{ Name string `json:"name"` }
json.NewDecoder(r.Body).Decode(&reqBody)

req.Header.Set(...) — Composite Types kursidagi map'ga yozish andazasiga o'xshaydi, faqat maxsus Header turi orqali. json.NewDecoder(r.Body).Decode(&reqBody) — JSON Marshaling darsidagi json.Unmarshalning oqim (stream) versiyasi: butun tanani avval []bytega o'qib olish shart emas, Decoder uni to'g'ridan-to'g'ri r.Bodydan o'qiydi.

>_ Exercise

Name string (json:"name") maydonli CreateUserRequest struct'ini yozing. CreateUserHandler(w http.ResponseWriter, r *http.Request) funksiyasini yozing: r.Header.Get("Content-Type") bilan sarlavhani o'qiydi, json.NewDecoder(r.Body).Decode(&req) bilan tanani JSON'dan CreateUserRequestga aylantiradi (xato bo'lsa http.Error bilan 400 qaytaring), so'ngra http.StatusCreated (201) bilan "Content-Type: <turi>, created: <ism>" yozadi.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

POST so'rovlari ma'lumotni tana orqali uzatadi, odatda JSON formatida. json.NewDecoder(r.Body).Decode(...) — so'rov tanasini to'g'ridan-to'g'ri oqim sifatida o'qib, structga aylantirishning samarali usuli. Sarlavhalar (Header) so'rov haqidagi qo'shimcha metama'lumotni tashiydi.

NEXT UP

Unit Testing with Table-Driven Tests

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

HTTP POST and Custom Requests

HTTP POST va maxsus so'rovlar

GET so'rovlari ma'lumotni URL orqali uzatadi, lekin POST so'rovlari ma'lumotni so'rov tanasi (body) orqali yuboradi — odatda JSON formatida, yangi resurs yaratish uchun ishlatiladi. So'rovga qo'shimcha ma'lumot berish uchun sarlavhalar (headers) ham qo'shiladi.

example.go
body := strings.NewReader(`{"name":"Aziz"}`)
req := httptest.NewRequest(http.MethodPost, "/users", body)
req.Header.Set("Content-Type", "application/json")

var reqBody struct{ Name string `json:"name"` }
json.NewDecoder(r.Body).Decode(&reqBody)

req.Header.Set(...) — Composite Types kursidagi map'ga yozish andazasiga o'xshaydi, faqat maxsus Header turi orqali. json.NewDecoder(r.Body).Decode(&reqBody) — JSON Marshaling darsidagi json.Unmarshalning oqim (stream) versiyasi: butun tanani avval []bytega o'qib olish shart emas, Decoder uni to'g'ridan-to'g'ri r.Bodydan o'qiydi.

>_ Exercise

Name string (json:"name") maydonli CreateUserRequest struct'ini yozing. CreateUserHandler(w http.ResponseWriter, r *http.Request) funksiyasini yozing: r.Header.Get("Content-Type") bilan sarlavhani o'qiydi, json.NewDecoder(r.Body).Decode(&req) bilan tanani JSON'dan CreateUserRequestga aylantiradi (xato bo'lsa http.Error bilan 400 qaytaring), so'ngra http.StatusCreated (201) bilan "Content-Type: <turi>, created: <ism>" yozadi.

Stuck? Reveal a hint to help you.

Hints (0/4)

Key Takeaway

Key Takeaway:

POST so'rovlari ma'lumotni tana orqali uzatadi, odatda JSON formatida. json.NewDecoder(r.Body).Decode(...) — so'rov tanasini to'g'ridan-to'g'ri oqim sifatida o'qib, structga aylantirishning samarali usuli. Sarlavhalar (Header) so'rov haqidagi qo'shimcha metama'lumotni tashiydi.

NEXT UP

Unit Testing with Table-Driven Tests