Aracılığıyla paylaş


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.

Not

Şu anda bu özellik çalışma alanlarında kullanılamaz.

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

Bilinmesi gerekenler

  • Çözümleyici, yalnızca şemadaki nesne türü ve alan eşleştiğinde çalıştırılan bir ilke tanımı 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 inbound ilkelerden backend değerlendirilir. İlkeleri diğer kapsamlardan devralmıyorlar. Daha fazla bilgi için bkz. Azure API Management'ta ilkeler.
  • GraphQL API'si için, çözümleyiciye özgü ilkelerden bağımsız olarak API'ye özgü ilkeleri yapılandırabilirsiniz. Örneğin, çözümleyici çağrılmadan önce isteği doğrulamak için kapsama bir inbound ilkesi ekleyin. API'nin API ilkeleri sekmesinde API'ye özgü ilkeleri yapılandırın.
  • GraphQL çözümleyicilerinde arabirim ve birleştirme türlerini desteklemek için, arka uç yanıtı ya __typename alanını zaten içermelidir ya da set-body ilkesi kullanılarak __typename eklenerek değiştirilmelidir.

Ö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'ler'i 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çiyi üzerine getirin.

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

      Azure portalında 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 öğesi ve alt ilkeler ekleyerek çözücünün HTTP yanıtını dönüştürün. http-response öğesi belirtilmezse, yanıt ham dize olarak döndürülür.

    3. Oluştur'u belirleyin.

      Azure portalında çözümleyici ilkesi düzenleyicisinin ekran görüntüsü.

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

    Azure portalında GraphQL API'sine yönelik çözümleyiciler listesinin ekran görüntüsü.

Çözümleyicileri yönetme

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

Azure portalında GraphQL API'sinin çö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 ilkesini geçersiz kılar.

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

  • Çözümleyicinin konfigürasyonunu test edin ve hata ayıklayın. Çö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.

    Azure portalında çö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övde 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

Geçerli çözümleyici yürütmesi için context.GraphQL.parent, üst nesneye ayarlanmış durumda. 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
        }
    }
}

comments türündeki Blog alanı için bir çözümleyici ayarlarsanız, hangi blog kimliğini kullanmanız gerektiğini anlamanız gerekir. Aşağıdaki çözümleyicide gösterildiği gibi kullanarak context.GraphQL.Parent["id"] blog 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 context.GraphQL.Arguments öğesine eklenir. Örneğin, aşağıdaki iki sorguyu göz önünde bulundurun:

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

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

Çözümleyiciyi çağırmanın iki yolu bu sorgulardı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>

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