Grafik Sorgulama Dili (GraphQL), web üzerinden iletişim için HTTP tabanlı bir istemci-sunucu mimarisi olan GraphQL API'leri ile etkileşime yönelik bir dil ve belirtimdir.
Facebook, REST mimari standardına alternatif olarak GraphQL'yi yayınladı. GraphQL, REST ile ilgili sorunların çoğunu durum bilgisiz ve önbelleğe alınabilir bir şekilde ele alır. Beklenen çıktıları veya girdileri açıklayan basit ve sezgisel bir sözdizimi sağlar ve API, istekle eşleşen verileri aktarır.
GraphQL bir belirtim olduğundan, GraphQL API'lerini Go dahil olmak üzere herhangi bir sunucu tarafı programlama dilinde oluşturabilir ve kullanabilirsiniz.
Go'da GraphQL API'lerini Kullanmaya Başlarken
GraphQL, HTTP mimarisine dayalıdırve Go yerleşik olarak HTTP işlevselliği sağlar http paket.
kullanabilirsiniz http paketlemek Go'da RESTful API'leri kullanın, diğer özelliklerin yanı sıra. GraphQL için, GraphQL API sunucularına sorgulama ve mutasyonlar yapabilirsiniz. http paket ve diğer yerleşik paketler.
GraphQL istemci paketleri gibi
makine kutusu veya shurCooL'ler GraphQL API'leri ile etkileşim sürecini daha da kolaylaştırın.kullanabilirsiniz http GraphQL API ile etkileşime geçmek için herhangi bir bağımlılık olmadan paket. Başlamak için bu paketleri Go dosyanıza aktarın:
içe aktarmak (
"bayt"
"kodlama/json"
"fmt"
"io/ioutil"
"ağ/http"
"zaman"
)
Şunu kullanacaksınız: bayt istek için yeni bir arabellek oluşturmak için paket ve json JSON istek gövdesine bir harita sıralamak için paket. Kullanabilirsiniz ioutil yanıt gövdesini okumak ve zaman İstek için bir zaman sınırı ayarlamak için paket.
Go ile GraphQL API'lerini Sorgulama
Sorgulayabileceğiniz ve uygulamalarınıza entegre edebileceğiniz birçok ücretsiz genel GraphQL API'si vardır. Bu makale için, dünya çapındaki ülkelerdeki verileri sorgulamak için Apollo GraphQL'in Ülkeler API'sini sorgulayacaksınız.
Bir yüke (istek gövdesi) sahip olmaları gerektiğinden, tüm GraphQL işlemleri tipik olarak POST istekleridir. GraphQL API'lerinin çoğu, içerik türü olarak JSON istek gövdesini kabul eder ve Go, JSON ile çalışmak için haritaları ve yapıları kullanmak için işlevsellik sağlar.
API'yi sorgulamak için GraphQL şemasının yapısını incelemeniz gerekecek. Sorgu, işlemin (sorgu veya mutasyon) anahtar olması ve verilerin haritanın değeri olması dışında normal bir GraphQL sorgusuyla aynı olacaktır.
İstek için JSON'a sıralayacağınız bir JSON harita örneğini şu şekilde bildirebilirsiniz.
jsonMapÖrneği := harita[sicim]sicim {
"sorgu": `
{
ülkeler {
isim,
telefon,
para birimi,
kod,
Emoji
}
}
`,
}
bu jsonMap Örneği değişken, isteğin gövdesi için eşleme örneğidir. Değer, API'den beklediğiniz sorgu verilerinin bir dizisidir. Bu durumda, API'lerden bekleyeceğiniz sorgu verileri ülkeler şema isim, telefon, para birimi, kod, Ve Emoji alanlar.
kullanabilirsiniz mareşal yöntemi json harita örneğini JSON olarak kodlamak için paket. bu mareşal yöntemi, kodlanmış JSON'u ve kodlama sorunu olan durumlar için bir hata döndürür.
jsonSonuç, hata := json. Mareşal (jsonMapInstance)
eğer hata!= sıfır {
fmt. Printf("JSON örneği %v sıralanırken bir hata oluştu", err)
}
Haritayı JSON'a kodladıktan sonra API'ye POST isteği gönderebilirsiniz. ile yeni bir istek örneği oluşturabilirsiniz. Yeni istek istek türünü, URL'yi ve JSON arabelleğini alan yöntem.
bu Yeni istek yöntem bir istek örneği döndürür. İçerik türünü API'nin özelliklerine göre ayarlamanız gerekir. HTTP istekleri için içerik türünü şu şekilde ayarlayabilirsiniz: Ayarlamak yöntemi Başlık istek örneğinizin yöntemi.
yeni İstek, hata := http. NewRequest("GÖNDER", "https://countries.trevorblades.com/graphql", bayt. NewBuffer (jsonResult))
Yeni istek. Başlık. Set("İçerik-Türü", "uygulama/json")
ile isteğiniz için basit bir HTTP istemcisi oluşturabilirsiniz. Müşteri HTTP paketinin yöntemi. bu Müşteri yöntemi ayrıca isteğiniz için bir zaman sınırı belirlemenize olanak tanır. zaman paket.
istemci := &http. İstemci {Zaman aşımı: zaman. Saniye * 5}
yanıt, hata := müşteri. Yap (yeni İstek)
eğer hata!= sıfır {
fmt. Printf("%v isteği yürütülürken bir hata oluştu", hata)
}
HTTP istemcisini bildirdikten sonra, API isteğinizi şu şekilde yürütün: Yapmak yöntem. bu Yapmak yöntem, istek örneğini kabul eder ve yanıtı ve bir hatayı döndürür.
API isteğinin yanıtını şu şekilde okuyabilirsiniz: ioutil paketin Hepsini oku yöntem. Bir çıktı akışını alır ve işleyebileceğiniz bir hatayla verilerin bir bayt dilimini döndürür.
yanıt Verisi, hata := ioutil. ReadAll (yanıt. Vücut)
eğer hata!= sıfır {
fmt. Printf("Veri Okuma Hatası%v", hata)
}
Yerleşik dize işleviyle, bayt dilimi yanıtını dize türüne dönüştürebilirsiniz.
fmt. Yazdır(sicim(yanıt Verileri))
İşte API isteğinin sonucunu gösteren bir yanıt:
RESTful API'leri Tüketmek, GraphQL API'lerini Tüketmek Gibidir
Hem REST hem de GraphQL API'leri HTTP protokolünü kullandığından, her birini kullanmak çok benzer bir işlemdir ve http Her iki durum için paket.
Aynı paketlerle istemciler oluşturmanız, örnekler istemeniz ve verileri okumanız gerekir.