Bir HTTP isteği göndermek, internet üzerinden iletişim kurması gereken herhangi bir uygulama için çok önemlidir. Go kullanarak çeşitli HTTP isteklerini nasıl göndereceğinizi öğrenin.

World Wide Web'in işleyişini yöneten temel ilkelerden biri, istek ve yanıt alışverişidir. Bir web sayfasına erişim isteği gönderdiğinizde, sunucu uygun verilerle yanıt verir.

Farklı internet iletişim türlerini yöneten popüler protokoller şunları içerir: HTTP (Üstmetin transfer protokolü), FTP (Dosya Aktarım Protokolü) ve SMTP (Basit Posta Aktarım Protokolü).

HTTP, bir web sitesini görüntülediğinizde veya web özellikli bir uygulama kullandığınızda genellikle kullanacağınız protokoldür. Go dahil birçok programlama dilinden gelen HTTP istekleriyle de çalışabilirsiniz.

HTTP İsteği Nedir?

HTTP, web tarayıcıları gibi istemcilerin istekleri sunuculara nasıl gönderip ardından bir yanıt döndürdüğünü tanımlar. Bir HTTP isteği, istemcinin erişmeye çalıştığı bir kaynak hakkında bilgi içerir. İstek mesajı tipik olarak kaynağı ve başlıklar ve sorgu parametreleri gibi diğer isteğe bağlı verileri tanımlayan bir URL içerir.

Var çeşitli HTTP isteği türleriGET, POST, PUT, DELETE, HEAD, OPTIONS ve CONNECT dahil. İlk dört yöntem türü en yaygın olanlarıdır; sırasıyla okuma, oluşturma, güncelleme ve silme CRUD işlemlerini yansıtırlar.

PUT istek türü genellikle PATCH istek türüyle birbirinin yerine kullanılır. Aynı amaca ulaşırlar, yalnızca talebin içermesini bekledikleri verilerde farklılık gösterirler.

Yaygın HTTP Yöntemlerini Kullanarak İstek Gönderme

Go yerleşik http paket web sunucuları oluşturmak ve HTTP isteklerini yönetmek için kullanabileceğiniz bir dizi işlev ve yapı sağlar. Bu çok sağlam bir pakettir ve tüm Go web çerçeveleri şu ya da bu şekilde bunun üzerine kuruludur. Go’nun bir alt paketidir. açık paket.

Go'da bir HTTP isteği oluşturmak için şunu kullanabilirsiniz: http. Yeni istek() uygun yöntemi, URL'yi, başlıkları ve istek gövdesini ayarlayın. İsteği oluşturduktan sonra Git'i kullanabilirsiniz. net/http paketin http. Müşteri{} çalıştırmak ve yanıtı almak için yapı.

Aşağıdaki kod örnekleri kullanım reqres.in, HTTP isteklerini test etmek için herkese açık bir API. Go programlarınızdaki GET, POST, PUT ve DELETE isteklerini test etmek için kullanabilirsiniz.

GÖNDERİ İsteği

Aşağıdaki kod, POST isteği gönderen bir işlevdir. /api/users ad ve iş ile yeni bir kullanıcı oluşturmak için reqres.in uç noktası.

paket ana

içe aktarmak (
"bayt"
"kodlama/json"
"fmt"
"yo"
"ağ/http"
)

işlevKullanıcı oluştur(isim, iş sicim) {
fmt. Yazdır("Kullanıcı oluşturuluyor...")

apiUrl := " https://reqres.in/api/users"
kullanıcıVerisi := []bayt(`{"isim":"` + isim + `","iş":"` + iş + `"}`)

// yeni http isteği oluştur
istek, hata := http. Yeni istek("POSTALAMAK", apiUrl, bayt. NewBuffer (kullanıcı Verileri))
rica etmek. Başlık. Ayarlamak("İçerik türü", "uygulama/json; karakter kümesi=utf-8")

// isteği gönder
istemci := &http. Müşteri{}
yanıt, hata := istemci. yapmak (istek)

eğer hata!= sıfır {
fmt. Println (hata)
}

yanıtBody, hata := io. ReadAll (yanıt. Vücut)

eğer hata!= sıfır {
fmt. Println (hata)
}

formattedData := formatJSON(responseBody)
fmt. Yazdır("Durum: ", cevap. Durum)
fmt. Yazdır("Yanıt gövdesi: ", biçimlendirilmiş Veriler)

// yürütmeden sonra belleği temizle
ertelemek cevap. Vücut. Kapalı()
}

formatJSON çıktı verilerini biçimlendirmek için yazabileceğiniz özel bir işlevdir. Bunu nasıl uygulayabileceğiniz aşağıda açıklanmıştır:

// JSON verilerini biçimlendirme işlevi
işlevformatJSON(veri []bayt)sicim {
var çıkış bayt. Tampon
hata := json. Girinti(&çıkış, veri, "", " ")

eğer hata!= sıfır {
fmt. Println (hata)
}

d := dışarı. Bayt()
geri dönmeksicim(D)
}

arayabilirsin Kullanıcı oluştur() şöyle bir programda çalışır:

işlevana() {
fmt. Yazdır("POST isteği yapılıyor...")
Kullanıcı oluştur("Tim Omolana", "Yazar")
}

Programı bir terminalde çalıştırdığınızda, git koş komutu, şöyle bir çıktı göreceksiniz:

İstek Al

Aşağıdaki kod, benzersiz kimliğini kullanarak reqres.in sunucusundan bir kullanıcıyı almak için bir GET isteği gönderen bir işlevdir.

// ana.go
işlevkullanıcı al(İD sicim) {
fmt. Yazdır("Kimliğe göre kullanıcı alınıyor...")

// kullanıcıyı kimliğe göre almak için API'ye GET isteği yapın
apiUrl := " https://reqres.in/api/users/" + kimlik
istek, hata := http. Yeni istek("ELDE ETMEK", apiUrl, sıfır)

eğer hata!= sıfır {
fmt. Println (hata)
}

rica etmek. Başlık. Ayarlamak("İçerik türü", "uygulama/json; karakter kümesi=utf-8")

istemci := &http. Müşteri{}
yanıt, hata := istemci. yapmak (istek)

eğer hata!= sıfır {
fmt. Println (hata)
}

yanıtBody, hata := io. ReadAll (yanıt. Vücut)

eğer hata!= sıfır {
fmt. Println (hata)
}

formattedData := formatJSON(responseBody)
fmt. Yazdır("Durum: ", cevap. Durum)
fmt. Yazdır("Yanıt gövdesi: ", biçimlendirilmiş Veriler)

// yürütmeden sonra belleği temizle
ertelemek cevap. Vücut. Kapalı()
}

Bir GET isteği, sunucuya veri göndermez, bu nedenle yapıldığında sunucuya bir istek gövdesini kabul etmez veya göndermez. Yukarıdaki işleve yapılan örnek bir çağrı şu şekilde görünür:

işlevana() {
fmt. Yazdır("GET isteği yapılıyor...")
kullanıcı al("2")
}

Çıktı:

PUT İsteği

PUT isteği, sunucuya veri de gönderdiği için POST isteğine çok benzer. En büyük fark, PUT'un mevcut bir kaynağı güncellerken POST'un yeni bir kaynak oluşturmasıdır.

İşte bir PUT isteğinin bir uygulaması:

// ana.go
işlevgüncelleme Kullanıcısı(isim, iş, kimlik sicim) {
fmt. Yazdır("Kullanıcı güncelleniyor...")

// kullanıcıyı güncellemek için API'ye PUT isteği gönder
apiUrl := " https://reqres.in/api/users/" + kimlik
kullanıcıVerisi := []bayt(`{"isim":"` + isim + `","iş":"` + iş + `"}`)

// yeni http PUT isteği oluştur
istek, hata := http. Yeni istek("KOYMAK", apiUrl, bayt. NewBuffer (kullanıcı Verileri))
rica etmek. Başlık. Ayarlamak("İçerik türü", "uygulama/json; karakter kümesi=utf-8")

// createUser işlevinden kalan işlev gövdesi...
// İstekte bulun, yanıt al ve hafızayı temizle...
}

Bu koddan, yukarıdaki PUT isteği ile POST isteği arasındaki tek farkın yöntem adı ve URL olduğunu görebilirsiniz. Mevcut verileri güncellemek için bir PUT kullanırken kimliği istek URL'sine eklemeniz gerekir. Bu işleve örnek bir çağrı şuna benzer:

ana fonksiyon() {
// ID 2 ile girişi güncelle.
güncellemeKullanıcı("Tim Yeni Adı", "Personel Yazarı", "2")
}

Yukarıdaki kod kullanıcıyı günceller ve aşağıdaki çıktıyı üretir:

İsteği sil

Bir web sunucusunda silme işlemi gerçekleştirmek için DELETE istek yöntemini kullanın. Silme isteği, URI tarafından tanımlanan kaynağı siler. Go'da bir DELETE isteği şöyle görünür:

işlevkullanıcıyı sil(İD sicim) {
fmt. Yazdır("Kullanıcı siliniyor...")
// kullanıcıyı silmek için API'ye DELETE isteği gönder
apiUrl := " https://reqres.in/api/users/" + kimlik

// yeni http isteği oluştur
istek, hata := http. Yeni istek("SİLMEK", apiUrl, sıfır)
rica etmek. Başlık. Ayarlamak("İçerik türü", "uygulama/json; karakter kümesi=utf-8")

istemci := &http. Müşteri{}
yanıt, hata := istemci. yapmak (istek)
eğer hata!= sıfır {
fmt. Println (hata)
}

fmt. Yazdır("Durum: ", cevap. Durum)
}

DELETE isteği bir gövdeyi ne kabul eder ne de döndürür, dolayısıyla JSON isteğini ve yanıt gövdesini ayrıştırmaya veya biçimlendirmeye gerek yoktur. Yanıt, yalnızca başarıyı veya başarısızlığı belirtmek için bir durum döndürür. Fonksiyona yapılan örnek bir çağrının çıktısı şu şekilde görünür:

işlevana() {
fmt. Yazdır("DELETE isteği yapılıyor...")
kullanıcıyı sil("2")
}

Çıktı:

kullanarak zamandan tasarruf edin. http. Postalamak() Ve http. Elde etmek() gelen yöntemler net/http yapılacak paket POSTALAMAK Ve ELDE ETMEK kullanmak zorunda kalmadan doğrudan istekte bulunur. Yeni istek() işlev ve Müşteri{} ayrı ayrı istek oluşturmak ve yapmak için yapı. Kontrol et ağ/http belgeleri daha fazla bilgi için.

Go Uygulamalarında HTTP İstekleri Yapma

bu http Go'daki paket, Go uygulamalarında HTTP istekleri yapmak ve yanıtları işlemek için gereken her şeyi sağlar. Paket tarafından sağlanan işlevler ve yapılar, GET, POST, PUT, DELETE ve daha pek çok farklı türde istek oluşturmanıza ve göndermenize olanak tanır.

Bu, Go'da diğer web hizmetleri ve API'lerle etkileşim kurabilen web uygulamaları oluşturmayı kolaylaştırır. almak için iyi bir yol Go'da HTTP istekleri yapmaya daha aşina olmak, başka bir REST API'sine istekler yapan bir uygulama oluşturmaktır. senin.