Çözümleyici için HTTP veri kaynağı

UYGULANANLAR: Tüm API Management katmanları

Çözümleyici ilkesi, http-data-source GraphQL şemasındaki bir nesne türü ve alanı için verileri çözümlemek için HTTP isteğini ve isteğe bağlı olarak HTTP yanıtını yapılandırıyor. Şema, GRAPHQL API'si olarak API Management'a aktarılmalıdır.

Not

İlkenin öğelerini ve alt öğelerini ilke bildiriminde sağlanan sırayla ayarlayın. API Management ilkelerini ayarlama veya düzenleme hakkında daha fazla bilgi edinin.

İlke bildirimi

<http-data-source> 
    <http-request>
        <get-authorization-context>...get-authorization-context policy configuration...</get-authorization-context>
        <set-backend-service>...set-backend-service policy configuration...</set-backend-service>
        <set-method>...set-method policy configuration...</set-method> 
        <set-url>URL</set-url>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
        <set-header>...set-header policy configuration...</set-header>
        <set-body>...set-body policy configuration...</set-body>
        <authentication-certificate>...authentication-certificate policy configuration...</authentication-certificate>  
    </http-request> 
    <backend>
        <forward-request>...forward-request policy configuration...</forward-request>
    <http-response>
        <set-body>...set-body policy configuration...</set-body>
        <xml-to-json>...xml-to-json policy configuration...</xml-to-json>
        <find-and-replace>...find-and-replace policy configuration...</find-and-replace>
        <publish-event>...publish-event policy configuration...</publish-event>
        <include-fragment>...include-fragment policy configuration...</include-fragment>
    </http-response>
</http-data-source> 

Öğeler

Veri Akışı Adı Açıklama Gerekli
http-request Çözümleyicinin HTTP isteğini yapılandırmak için bir URL ve alt ilke belirtir. Yes
arka uç İsteğe bağlı olarak çözümleyicinin HTTP isteğini belirtildiyse bir arka uç hizmetine iletir. Hayır
http-response İsteğe bağlı olarak çözümleyicinin HTTP yanıtını yapılandırmak için alt ilkeleri belirtir. Belirtilmezse, yanıt ham dize olarak döndürülür. Hayır

http-request öğeleri

Not

Belirtilen durumlar dışında, her alt öğe en fazla bir kez belirtilebilir. Öğeleri listelenen sırada belirtin.

Öğe Açıklama Gerekli
get-authorization-context Çözümleyicinin HTTP isteği için bir yetkilendirme bağlamı alır. Hayır
set-backend-service Çözümleyicinin HTTP isteğini belirtilen arka uçtan yönlendirir. Hayır
include-fragment İlke tanımına bir ilke parçası ekler. Birden çok parça varsa, ek include-fragment öğeler ekleyin. Hayır
set-method Çözümleyicinin HTTP isteğinin yöntemini ayarlar. Yes
set-url Çözümleyicinin HTTP isteğinin URL'sini ayarlar. Yes
set-header Çözümleyicinin HTTP isteğinde bir üst bilgi ayarlar. Birden çok üst bilgi varsa, ek header öğeler ekleyin. Hayır
set-body Çözümleyicinin HTTP isteğindeki gövdeyi ayarlar. Hayır
kimlik doğrulama sertifikası Çözümleyicinin HTTP isteğinde bir istemci sertifikası kullanarak kimlik doğrulaması yapar. Hayır

arka uç öğesi

Öğe Açıklama Gerekli
iletme isteği Çözümleyicinin HTTP isteğini yapılandırılmış bir arka uç hizmetine iletir. Hayır

http-response öğeleri

Not

Belirtilen durumlar dışında, her alt öğe en fazla bir kez belirtilebilir. Öğeleri listelenen sırada belirtin.

Veri Akışı Adı Açıklama Gerekli
set-body Çözümleyicinin HTTP yanıtında gövdeyi ayarlar. Hayır
xml-to-json Çözümleyicinin HTTP yanıtını XML'den JSON'a dönüştürür. Hayır
bul ve değiştir Çözümleyicinin HTTP yanıtında bir alt dize bulur ve bunu farklı bir alt dizeyle değiştirir. Hayır
publish-event GraphQL API şemasında belirtilen bir veya daha fazla aboneliğe bir olay yayımlar. Hayır
include-fragment İlke tanımına bir ilke parçası ekler. Birden çok parça varsa, ek include-fragment öğeler ekleyin. Hayır

Kullanım

Kullanım notları

  • Bu ilkeyle bir çözümleyiciyi yapılandırmak ve yönetmek için bkz . GraphQL çözümleyicisini yapılandırma.
  • Bu ilke yalnızca şemada eşleşen bir GraphQL işlem türündeki tek bir alan çözümlendiğinde çağrılır.
  • Bu ilke GraphQL birleşim türlerini destekler.

Örnekler

GraphQL sorgusu için çözümleyici

Aşağıdaki örnek, bir arka uç veri kaynağına HTTP GET çağrısı yaparak sorguyu çözümler.

Örnek şema

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Örnek ilke

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/get/users</set-url>
    </http-request>
</http-data-source>

Sıvı şablonu kullanarak liste döndüren GraqhQL sorgusu için çözümleyici

Aşağıdaki örnek, sorguya HTTP yanıtında bir liste döndürmek için küme gövdesi ilkesinde kullanılmak üzere desteklenen bir sıvı şablonu kullanır. Ayrıca yanıttaki alanı REST API'den name GraphQL yanıtında olarak yeniden adlandırırusername.

Örnek şema

type Query {
    users: [User]
}

type User {
    id: String!
    name: String!
}

Örnek ilke

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/users</set-url>
    </http-request>
    <http-response>
        <set-body template="liquid">
            [
                {% JSONArrayFor elem in body %}
                    {
                        "name": "{{elem.username}}"
                    }
                {% endJSONArrayFor %}
            ]
        </set-body>
    </http-response>
</http-data-source>

GraphQL mutasyonu için çözümleyici

Aşağıdaki örnek, HTTP veri kaynağına istekte bulunarak POST veri ekleyen bir mutasyonu çözer. HTTP isteğinin ilkesindeki set-body ilke ifadesi, GraphQL sorgusunda gövdesi olarak geçirilen bir name bağımsız değişkeni değiştirir. Gönderilen gövde aşağıdaki JSON gibi görünür:

{
    "name": "the-provided-name"
}

Örnek şema

type Query {
    users: [User]
}

type Mutation {
    makeUser(name: String!): User
}

type User {
    id: String!
    name: String!
}

Örnek ilke

<http-data-source>
    <http-request>
        <set-method>POST</set-method>
        <set-url>https://data.contoso.com/user/create </set-url>
        <set-header name="Content-Type" exists-action="override">
            <value>application/json</value>
        </set-header>
        <set-body>@{
            var args = context.GraphQL.Arguments;  
            JObject jsonObject = new JObject();
            jsonObject.Add("name", args["name"])
            return jsonObject.ToString();
        }</set-body>
    </http-request>
</http-data-source>

GraphQL birleşim türü için çözümleyici

Aşağıdaki örnek, bir arka uç veri kaynağına HTTP GET çağrısı yaparak sorguyu orderById çözümler ve müşteri kimliğini ve türünü içeren bir JSON nesnesi döndürür. Müşteri türü ve GuestCustomer türlerinin RegisteredCustomer birleşimidir.

Örnek şema

type Query {
  orderById(orderId: Int): Order
}

type Order {
  customerId: Int!
  orderId: Int!  
  customer: Customer
}

enum AccountType {
  Registered
  Guest
}

union Customer = RegisteredCustomer | GuestCustomer

type RegisteredCustomer {
  accountType: AccountType!
  customerId: Int!
  customerGuid: String!
  firstName: String!
  lastName: String!
  isActive: Boolean!
}

type GuestCustomer {
  accountType: AccountType!
  firstName: String!
  lastName: String!
}

Örnek ilke

Bu örnekte, dış kaynaktan gelen müşteri sonuçlarıyla dalga geçiyoruz ve ilkede getirilen sonuçları sabit kodla set-body kodlıyoruz. Alanı __typename , müşterinin türünü belirlemek için kullanılır.

<http-data-source>
    <http-request>
        <set-method>GET</set-method>
        <set-url>https://data.contoso.com/orders/</set-url>
    </http-request>
    <http-response>
        <set-body>{"customerId": 12345, "accountType": "Registered", "__typename": "RegisteredCustomer" }
        </set-body>
    </http-response>
</http-data-source>

İlkelerle çalışma hakkında daha fazla bilgi için bkz: