RESTful API’ler, web üzerinden veri aktarımı için popüler mimarilerdir. RESTful API’ler tipik olarak HTTP kullanır ve bu da onları durumsuzluğun önemli olduğu durumlar için uygun hale getirir.
Herhangi bir sunucu tarafı dil gibi, Go’da HTTP protokolü ile etkileşime girebilir ve HTTP istekleri yapabilirsiniz.
Go’da RESTful API’leri Kullanmaya Başlarken
http paketi , Go’daki HTTP protokolüyle etkileşim kurmak için ihtiyaç duyacağınız işlevlerin çoğunu sağlar. Bu, HTTP istekleri yapmayı içerir ve Gin veya veritabanı gibi harici bağımlılıklara ihtiyacınız yoktur .
Go’da web kazıma için API’leri kullanmak ve sayfaları getirmek için http paketini kullanabilirsiniz .
Go’da HTTP istekleri yapmaya başlamak için bu paketleri içe aktarın.
import (
“bytes”
“encoding/json”
“fmt”
“io/ioutil”
“net/http”
)
Bayt dilimlerini işlemek için bayt paketini , istek verilerini biçimlendirmek için json paketini , standart çıktıya yazmak için fmt paketini , giriş ve çıkış için ioutil paketini ve istek göndermek için http paketini kullanacaksınız.
Go’da Basit Bir GET İsteği
Tipik GET istekleri, bir sunucudan verileri okur ve API’nin doğasına ve belirtimine bağlı olarak veriler için parametreler sağlayabilir.
Bu öğreticide, httpbin’in basit istek ve yanıt hizmetini kullanarak RESTful API’leri nasıl kullanacağınızı öğreneceksiniz.
İşte Go ile bir HTTP isteği yapmaya bir örnek:
url := “https://httpbin.org/get”
response, err := http.Get(url)
if err != nil {
fmt.Printf(“There was an error from the API request %s”, err.Error())
} else {
// continues [1] …
}
url değişkeni , isteği gönderdiğiniz uç noktadır. Get yöntemi URL’yi alır, Get isteğini yürütür ve üstbilgileri ve gövdesi de dahil olmak üzere yanıtı döndürür.
Gereksinimlerinize bağlı olarak istekteki herhangi bir hatayı işleyebilirsiniz. Herhangi bir hata yoksa, ihtiyacınız olan bilgileri Alma isteğinden çıkarmaya devam edebilirsiniz.
} else {
// … [1] continued
responseData, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Printf(“There was an error from parsing the request body %s”, err.Error())
} else {
// continues [2] …
}
}
Yanıtın Gövde alanı, yanıtın gövdesini tutar. ioutil paketinin ReadAll yöntemini kullanarak yanıt gövdesini okuyabilir ve olası hataları işleyebilirsiniz.
} else {
// … [2] continued
fmt.Println(string(responseData))
}
else ifadesi , okuma işleminde herhangi bir hata yoksa, yanıt gövdesini konsolunuza yazdırır.
İşte httpbin’in uç noktasına yapılan GET isteğinin sonucu.
GET isteğinin sonucu
Go’da Basit Bir POST İsteği
Tipik POST istekleri, sunucuya veri yükleri sağlar ve sunucu, işleme bağlı olarak bir yanıt döndürür.
İşte POST isteğinin bir parçası olarak sunucuya bir JSON yükünü kodlamak için basit bir yapı.
type JSON struct {
info string
message string
}
JSON yapısı bilgi ve mesaj dizisi alanlarına sahiptir ve istek için bir yapı örneği başlatacaksınız.
url := “https://httpbin.org/post”
jsonInstance := JSON {
info: “expecting success”,
message: “the request should return “,
}
url değişkeni , httpbin web sitesindeki POST istek bitiş noktasını saklar. jsonInstance değişkeni, yapılandırılmış verileri depolamak ve göndermek için kullanabileceğiniz JSON yapısının bir örneğidir .
İstek için JSON’u biçimlendirmek için json paketindeki Marshal yöntemini kullanabilirsiniz .
jsonData, err := json.Marshal(jsonInstance)
if err != nil {
fmt.Println(“there was an error with the JSON”, err.Error())
} else {
// continues [1] …
}
Marshal yöntemi ayrıca işleyebileceğiniz bir hata döndürür . JSON sıralama işleminde herhangi bir hata yoksa, POST isteğinde bulunmaya devam edebilirsiniz.
POST istekleri yapmak için Post yöntemini kullanabilirsiniz . Post yöntemi, URL uç noktasını, isteğin içerik türünü ve yükün arabelleğini alır. Yanıt ve bir hata döndürür.
} else {
// … continued [1]
response, err := http.Post(url, “application/json”, bytes.NewBuffer(jsonData))
if err != nil {
fmt.Println(“there was an error with the request”, err.Error())
} else {
// continues [2] …
}
}
Yine, ioutil paketinin ReadAll yöntemini kullanarak yanıt gövdesini okuyabilirsiniz :
} else {
// … continued [2]
data, err := ioutil.ReadAll(response.Body)
if err != nil {
fmt.Println(“there was an error reading the request body”, err.Error())
} else {
fmt.Println(string(data))
}
}
Println ifadesi, konsolunuza HTTP isteğinin sonucunu verir .
Httpbin belgelerinde belirtildiği gibi , bu POST uç noktası, gönderdiğiniz istek verilerini döndürür.
POST isteğinin sonucu
Go’da Web Uygulamaları Oluşturmak Kolay
Go’da bağımlılıklar olmadan çeşitli işlevlere sahip web uygulamaları oluşturabilirsiniz.
Http paketi, çoğu işleminiz için ihtiyaç duyacağınız işlevlere sahiptir . Bu paketi , JSON işlemleri için json paketi, sinyalleme için bağlam paketi ve şablonlama için şablon paketi gibi başkalarıyla birlikte kullanabilirsiniz . Standart kütüphanede başka birçok paket var.