06 Jun 2017
Tamamını okumak istemeyenler için özeti


GraphQL; Facebook tarafından geliştirilen, API’ler için bir data sorgulama dili olarak tanımlanabilir. Yani GraphQL sorgunuz ile (backend tarafında tanımlanan)dataya client üzerinden şekil verebiliyorsunuz. Dönen dataya şekil verdiğiniz için daha ürün ve ihtiyaç odaklı bir yapıya sahip, client’lar için daha esnek bir yapı sunuyor.

API ile dönen data içerisinde ihtiyacınız olmayan onlarca veri olabiliyor ve bu size kilobaytlar kaybettiriyor. Örneğin github v3 API’sini kullanarak bir kişiye ait repo isimlerini listeleyen bir app yazmak istediğimizde gelen dataya (104 KB) ve github’ın v4 graphql API’si ile deneyebileceğiniz aşağıdaki graphql sorgusunun çıktısına (3 KB) bakın.

{
  user(login: "askn") {
    repositories(first: 100) {
      edges {
        node {
          name
        }
      }
    }
  }
}

GraphQL üzerinde tip sistemi mevcut. (Strongly typed) Tip sistemi olduğu için bir GraphQL sorgusunun geçerli olup olmadığı önceden belirlenebilir.

Vereceğiniz alias’lar ile API’den dönen json’ı şöyle bir formata dahi dönüştürebilirsiniz. Dönen cevap zorunuza mı gidiyor basın alias’ı.

GraphQL, istediğiniz verileri getirmek için birden fazla REST isteğini tek bir sorgu ile değiştirmenize olanak sağlar. Örneğin twitter anasayfasını inceleyelim.

  • 1 - Profil bilginiz
  • 2 - Takip etmeniz için önerilen kişiler
  • 3 - Akış üzerindeki twitler
  • 4 - Gündem

Her bir endpointten data çekmek için sorgu atılıyor bunun yerine graphql ile kaba taslak aşağıdaki gibi bir şeyler yazıp tek bir sorgu ile istediğimiz datayı istediğimiz formatta elde edebiliriz.

{
  me {
    ...user
    header_photo {
      # buraya bir şeyler daha
    }
    tweet_count
    following_count
    follower_count
  }

  trends {
    name
    slug
  }

  suggestions(limit: 3) {
    ...user
  }

  tweets(limit: 25) {
    user {
      ...user
    }
    text
    retweet_count
    favorite_count
    favorited
    retweeted
    # buraya bir şeyler daha
  }
}

fragment user on User {
  id
  name
  screen_name
  profil_photo {
    # buraya bir şeyler daha
  }
}

Dikkatinizi çekmek istediğim iki şey var burada. İlk olarak ortak kullandığım user alanları için bir fragment tanımlayarak DRY hale getirdim. Diğer nokta ise tweets ve suggestions field resolver’ına parametre geçtim. Bunları diğer blog yazılarımda ayrıntılı aktaracağım. Şimdilik hoş, kolay kullanımına bir göz atmanızı istedim. Gerisi kolayca anlaşılabiliyor zaten json’ın sadece key’lerinin olduğu bir şey gibi.

GraphQL içinde bulunan şemanızdan otomatik oluşturulan introspection sayesinde hangi sorguların nasıl desteklendiğini kendisi dokümante ediyor. Örneğin: Github API v4’ü deneyebileceğiniz graphiql editorünün sağ kısmındaki dokümanı inceleyebilirsiniz.

Şu an github, shopify, facebook, coursera, yelp, protel(🙃) gibi birçok şirket graphql kullanıyor ve destekliyor.

Kullanmanız için en önemli bir diğer sebep ise şu an oldukça HYPE bir teknoloji olması. Ortamlarda ağğbii siz hala mı rest yazıyorsunuz? ya ne gada çağ dışısınız diyebilirsiniz.

Okuduğunuz için Tşk.

Kaynaklar

Aşkın Gedik
Software Engineer

Ben Aşkın,

Benimle ilgili daha fazla bilgiyi hakkımda sayfasına göz atarak veya Twitter, Facebook ve Github üzerinden takip ederek öğrenebilirsiniz.