Share via


GraphQL çözümleyicisi yapılandırma

UYGULANANLAR: Tüm API Management katmanları

GraphQL şemasında belirtilen nesne türündeki bir GraphQL alanının verilerini alacak veya ayarlayan bir çözümleyici yapılandırın. Şema, GRAPHQL API'si olarak API Management'a aktarılmalıdır.

API Management şu anda aşağıdaki veri kaynaklarına erişebilen çözümleyicileri destekler:

Bilinmesi gerekenler

  • Çözümleyici, yalnızca şemadaki eşleşen nesne türü ve alanı yürütürken çağrılan ilke tanımını içeren bir kaynaktır.
  • Her çözümleyici tek bir alan için verileri çözümler. Birden çok alanın verilerini çözümlemek için her bir alan için ayrı bir çözümleyici yapılandırın.
  • Çözümleyici kapsamlı ilkeler, ilke yürütme işlem hattındaki ve backendinbound ilkelerden sonra değerlendirilir. İlkeleri diğer kapsamlardan devralmıyorlar. Daha fazla bilgi için bkz . API Management'ta ilkeler.
  • Çözümleyici kapsamlı ilkelerden bağımsız olarak GraphQL API'sinin API kapsamlı ilkelerini yapılandırabilirsiniz. Örneğin, çözümleyici çağrılmadan önce isteği doğrulamak için kapsama bir validate-graphql-request ilkesi inbound ekleyin. API'nin API ilkeleri sekmesinde API kapsamlı ilkeleri yapılandırın.
  • GraphQL çözümleyicilerinde arabirim ve birleşim türlerini desteklemek için arka uç yanıtının alanı zaten içermesi __typename veya içermesi için __typenameküme gövdesi ilkesi kullanılarak değiştirilmesi gerekir.

Önkoşullar

  • Mevcut bir API Management örneği. Henüz oluşturmadıysanız bir tane oluşturun.
  • Geçişli veya yapay GraphQL API'lerini içeri aktarabilirsiniz.

Çözümleyici oluşturma

Aşağıdaki adımlar, HTTP tabanlı bir veri kaynağı kullanarak bir çözümleyici oluşturur. Genel adımlar, desteklenen bir veri kaynağı kullanan tüm çözümleyiciler için benzerdir.

  1. Azure portalında API Management örneğine gidin.

  2. Sol menüde API'leri ve ardından GraphQL API'nizin adını seçin.

  3. Şema sekmesinde, çözümleyiciyi yapılandırmak istediğiniz nesne türündeki bir alanın şemasını gözden geçirin.

    1. Bir alan seçin ve sol kenar boşluğunda işaretçinin üzerine gelin.

    2. + Çözümleyici Ekle'yi seçin.

      Portaldaki GraphQL şemasındaki bir alandan çözümleyici ekleme işleminin ekran görüntüsü.

  4. Çözümleyici Oluştur sayfasında:

    1. İsterseniz Name özelliğini güncelleştirin, isteğe bağlı olarak bir Açıklama girin ve Tür ve Alan seçimlerini onaylayın veya güncelleştirin.
    2. Çözümleyicinin Veri kaynağını seçin. Bu örnekte HTTP API'sini seçin.
  5. Çözümleyici ilke düzenleyicisinde ilkeyi http-data-source senaryonuz için alt öğelerle güncelleştirin.

    1. GraphQL işlemini bir HTTP isteğine dönüştürmek için gerekli http-request öğeyi ilkelerle güncelleştirin.

    2. İsteğe bağlı olarak bir http-response öğe ekleyin ve çözümleyicinin HTTP yanıtını dönüştürmek için alt ilkeler ekleyin. http-response öğesi belirtilmezse, yanıt ham dize olarak döndürülür.

    3. Oluştur'u belirleyin.

      Portalda çözümleyici ilkesi düzenleyicisinin ekran görüntüsü.

    Çözümleyici alana eklenir ve Çözümleyiciler sekmesinde görüntülenir.

    Portalda GraphQL API'sinin çözümleyiciler listesinin ekran görüntüsü.

Çözümleyicileri yönetme

API'nin Çözümleyiciler sekmesinde GraphQL API'sinin çözümleyicilerini listeleyin ve yönetin.

Portalda GraphQL API çözümleyicilerini yönetme işleminin ekran görüntüsü.

Çözümleyiciler sekmesinde:

  • Bağlı sütunu çözümleyicinin şu anda GraphQL şemasında bulunan bir alan için yapılandırılıp yapılandırılmadığını gösterir. Çözümleyici bağlı değilse çağrılamıyor.

  • Çözümleyicinin bağlam menüsünde (...) Çözümleyiciyi Kopyalama, Düzenleme veya Silme komutlarını bulun. Farklı bir tür ve alanı hedefleyen benzer bir çözümleyiciyi hızla oluşturmak için listelenen bir çözümleyiciyi kopyalama.

  • + Oluştur'u seçerek yeni bir çözümleyici oluşturabilirsiniz.

Çözümleyiciyi düzenleme ve test edin

Tek bir çözümleyiciyi düzenlediğinizde Çözümleyiciyi düzenle sayfası açılır. Şunları yapabilirsiniz:

  • Çözümleyici ilkesini ve isteğe bağlı olarak veri kaynağını güncelleştirin. Veri kaynağının değiştirilmesi geçerli çözümleyici ilkesinin üzerine yazar.

  • Çözümleyicinin hedeflediğini türü ve alanı değiştirin.

  • Çözümleyicinin yapılandırmasını test edin ve hatalarını ayıklar. Çözümleyici ilkesini düzenlerken, şemada doğrulayabileceğiniz veri kaynağı çıkışını denetlemek için Testi Çalıştır'ı seçin. Hatalar oluşursa, yanıt sorun giderme bilgilerini içerir.

    Portalda çözümleyiciyi düzenleme işleminin ekran görüntüsü.

GraphQL bağlamı

  • Çözümleyicinin isteği ve yanıtının bağlamı (belirtilirse) özgün ağ geçidi API'sinin isteği bağlamından farklıdır:
    • context.GraphQL özellikleri, geçerli çözümleyici yürütmesi için bağımsız değişkenlere (Arguments) ve üst nesneye (Parent) ayarlanır.
    • İstek bağlamı, GraphQL sorgusunda gövdesi olarak geçirilen bağımsız değişkenleri içerir.
    • Yanıt bağlamı, ağ geçidi isteğinin tam yanıtının bağlamı değil çözümleyici tarafından yapılan bağımsız çağrının yanıtıdır. context İstek ve yanıt işlem hattı üzerinden geçirilen değişken, GraphQL çözümleyicisi ile kullanıldığında GraphQL bağlamı ile genişletilir.

Bağlam. GraphQL.parent

context.GraphQL.parent geçerli çözümleyici yürütmesi için üst nesneye ayarlanır. Aşağıdaki kısmi şemayı göz önünde bulundurun:

type Comment {
    id: ID!
    owner: string!
    content: string!
}

type Blog {
    id: ID!
    title: string!
    content: string!
    comments: [Comment]!
    comment(id: ID!): Comment
}

type Query {
    getBlog(): [Blog]!
    getBlog(id: ID!): Blog
}

Ayrıca, belirli bir blog için tüm bilgiler için bir GraphQL sorgusu düşünün:

query {
    getBlog(id: 1) {
        title
        content
        comments {
            id
            owner
            content
        }
    }
}

Türündeki comments alan Blog için bir çözümleyici ayarlarsanız, hangi blog kimliğini kullanacağınızı anlamak istersiniz. Aşağıdaki çözümleyicide gösterildiği gibi kullanarak context.GraphQL.Parent["id"] blogun kimliğini alabilirsiniz:

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>@($"https://data.contoso.com/api/blog/{context.GraphQL.Parent["id"]}")
        </set-url>
    </http-request>
</http-data-source>

Bağlam. GraphQL.Arguments

Parametreli GraphQL sorgusunun bağımsız değişkenleri öğesine context.GraphQL.Argumentseklenir. Örneğin, aşağıdaki iki sorguyu göz önünde bulundurun:

query($id: Int) {
    getComment(id: $id) {
        content
    }
}

query {
    getComment(id: 2) {
        content
    }
}

Bu sorgular çözümleyiciyi çağırmanın getComment iki yolu vardır. GraphQL aşağıdaki JSON yükünü gönderir:

{
    "query": "query($id: Int) { getComment(id: $id) { content } }",
    "variables": { "id": 2 }
}

{
    "query": "query { getComment(id: 2) { content } }"
}

Çözümleyiciyi aşağıdaki gibi tanımlayabilirsiniz:

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>@($"https://data.contoso.com/api/comment/{context.GraphQL.Arguments["id"]}")</set-url>
    </http-request>
</http-data-source>

Sonraki adımlar

Daha fazla çözümleyici örneği için bkz: