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:
- HTTP tabanlı veri kaynağı (REST veya SOAP API)
- Cosmos DB veritabanı
- Azure SQL veritabanı
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
backend
inbound
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__typename
kü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.
Sol menüde API'leri ve ardından GraphQL API'nizin adını seçin.
Şema sekmesinde, çözümleyiciyi yapılandırmak istediğiniz nesne türündeki bir alanın şemasını gözden geçirin.
Bir alan seçin ve sol kenar boşluğunda işaretçinin üzerine gelin.
+ Çözümleyici Ekle'yi seçin.
Çözümleyici Oluştur sayfasında:
- İ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.
- Çözümleyicinin Veri kaynağını seçin. Bu örnekte HTTP API'sini seçin.
Çözümleyici ilke düzenleyicisinde ilkeyi
http-data-source
senaryonuz için alt öğelerle güncelleştirin.GraphQL işlemini bir HTTP isteğine dönüştürmek için gerekli
http-request
öğeyi ilkelerle güncelleştirin.İ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.Oluştur'u belirleyin.
Çözümleyici alana eklenir ve Çözümleyiciler sekmesinde görüntülenir.
Çözümleyicileri yönetme
API'nin Çözümleyiciler sekmesinde GraphQL API'sinin çözümleyicilerini listeleyin ve yönetin.
Çö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.
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.Arguments
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
}
}
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: