Aracılığıyla paylaş


GraphQL'de alan seçimi (Projeksiyon)

GraphQL'de, istediğiniz alanlar Tam olarak Veri API'sinin oluşturucusunun (DAB) döndürdüğü verileri tanımlar. DAB, yalnızca istediğiniz eşlenmiş (kullanıma sunulan) sütunlar ve dahili olarak getirmesi gereken ek sütunlar da dahil olmak üzere bu seçimleri parametreli SQL'de derler. Bunlar, ilişkiler (yabancı anahtarlar), birincil anahtarlar veya sayfalandırma ve imleç oluşturmada kullanılan kararlı sıralama için gerekli sütunları içerebilir.

Uyarı

GraphQL'de gibi SELECT *joker karakter yoktur. İstemciler her alanı açıkça belirtmelidir.

Bu belgenin REST sürümüne gidin.

Temel seçim

Birkaç eşlenmiş alanı sorgulama.

GraphQL sorgusu

query {
  books {
    items {
      id
      title
      price
    }
  }
}

Kavramsal SQL

SELECT
  id,
  sku_title AS title,
  sku_price AS price
FROM dbo.books;

Örnek yanıt

{
  "data": {
    "books": {
      "items": [
        {
          "id": 1,
          "title": "Dune",
          "price": 20
        }
      ]
    }
  }
}

Alan diğer adları

Diğer adlar, veritabanında değil yanıttaki alanları yeniden adlandırır. SQL katmanı GraphQL alan adlarının diğer adı değildir; diğer ad, veri alımının ardından gerçekleşir.

query {
  books {
    items {
      id
      bookTitle: title
      cost: price
    }
  }
}

Kavramsal SQL

SELECT
  id,
  sku_title AS title,
  sku_price AS price
FROM dbo.books;

Örnek yanıt

Diğer adlarla:

{
  "data": {
    "books": {
      "items": [
        {
          "id": 2,
          "bookTitle": "Foundation",
          "cost": 18
        }
      ]
    }
  }
}

İç içe seçim

Yapılandırmada tanımlanan ilişkiler iç içe sorgulara izin verir. Aşağıdaki kavramsal SQL tek bir birleştirmeyi gösterir. Uygulamada DAB, tek bir düzleştirilmiş birleştirme yerine bir veya daha fazla parametreli sorgu (örneğin, bir üst sorgu artı toplu alt getirme) yürütebilir.

GraphQL sorgusu

query {
  books {
    items {
      id
      title
      category {
        id
        name
      }
    }
  }
}

Kavramsal SQL

SELECT
  b.id,
  b.sku_title AS title,
  c.id AS category_id,
  c.name AS category_name
FROM dbo.books AS b
JOIN dbo.categories AS c
  ON b.category_id = c.id;

Örnek yanıt

{
  "data": {
    "books": {
      "items": [
        {
          "id": 1,
          "title": "Dune",
          "category": {
            "id": 10,
            "name": "Sci-Fi"
          }
        },
        {
          "id": 2,
          "title": "Foundation",
          "category": {
            "id": 10,
            "name": "Sci-Fi"
          }
        }
      ]
    }
  }
}

Bire çok seçimi

Ters ilişkiyi de geçirebilirsiniz. Sql de kavramsaldır; gerçek yürütme üst satırları yinelenenleri kaldırabilir ve alt koleksiyonları ayrı ayrı gerçekleştirebilir.

GraphQL sorgusu

query {
  categories {
    items {
      id
      name
      books {
        items {
          id
          title
        }
      }
    }
  }
}

Kavramsal SQL

SELECT
  c.id,
  c.name,
  b.id AS book_id,
  b.sku_title AS title
FROM dbo.categories AS c
JOIN dbo.books AS b
  ON c.id = b.category_id;

Örnek yanıt

{
  "data": {
    "categories": {
      "items": [
        {
          "id": 10,
          "name": "Sci-Fi",
          "books": {
            "items": [
              { "id": 1, "title": "Dune" },
              { "id": 2, "title": "Foundation" }
            ]
          }
        }
      ]
    }
  }
}

Örnek yapılandırma

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

Ayrıca bakınız

Konsept REST GraphQL Amaç
Projection $select items Döndürülecek alanları seçme
Filtering $filter filtre Satırları koşula göre kısıtlama
Sıralama $orderby orderBy Sıralama düzenini tanımlama
Sayfa Boyutu $first first Sayfa başına öğe sayısını sınırlama
Devam $after sonra İmleç kullanarak son sayfadan devam et

Uyarı

REST anahtar sözcükleri, OData kurallarını izleyerek ile $başlar.