다음을 통해 공유


해결 프로그램을 위한 HTTP 데이터 원본

적용 대상: 모든 API Management 계층

http-data-source 해결 프로그램 정책은 GraphQL 스키마의 개체 형식 및 필드에 대한 데이터를 확인하기 위해 HTTP 요청과 선택적으로 HTTP 응답을 구성합니다. 스키마는 GraphQL API로 API Management에 가져와야 합니다.

참고 항목

정책 문에 제공된 순서대로 정책의 요소 및 자식 요소를 설정합니다. API Management 정책을 설정하거나 편집하는 방법에 대해 자세히 알아봅니다.

정책 문

<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> 

Elements

이름 설명 필수
http-request 해결 프로그램의 HTTP 요청을 구성하기 위한 URL 및 자식 정책을 지정합니다.
백 엔드 필요에 따라 지정된 경우 해결 프로그램의 HTTP 요청을 백 엔드 서비스로 전달합니다. 아니요
http-response 선택적으로 해결 프로그램의 HTTP 응답을 구성하는 자식 정책을 지정합니다. 지정하지 않으면 응답이 원시 문자열로 반환됩니다. 아니요

http-request 요소

참고 항목

언급된 경우를 제외하고 각 자식 요소를 한 번에 지정할 수 있습니다. 나열된 순서대로 요소를 지정합니다.

요소 설명 필수
get-authorization-context 해결 프로그램의 HTTP 요청에 대한 권한 부여 컨텍스트를 가져옵니다. 아니요
set-backend-service 해결 프로그램의 HTTP 요청을 지정된 백 엔드로 리디렉션합니다. 아니요
include-fragment 정책 정의에 정책 조각을 삽입합니다. 헤더가 여러 개 있는 경우 추가 include-fragment 요소를 추가합니다. 아니요
set-method 해결 프로그램의 HTTP 요청 메서드를 설정합니다.
set-url 해결 프로그램의 HTTP 요청 URL입니다.
set-header 해결 프로그램의 HTTP 요청에서 헤더를 설정합니다. 헤더가 여러 개 있는 경우 다른 header 요소를 추가합니다. 아니요
set-body 해결 프로그램의 HTTP 요청에서 본문을 설정합니다. 아니요
authentication-certificate 해결 프로그램의 HTTP 요청에서 클라이언트 인증서를 사용하여 인증합니다. 아니요

백 엔드 요소

요소 설명 필수
forward-request 구성된 백 엔드 서비스에 해결 프로그램의 HTTP 요청을 전달합니다. 아니요

http-response 요소

참고 항목

언급된 경우를 제외하고 각 자식 요소를 한 번에 지정할 수 있습니다. 나열된 순서대로 요소를 지정합니다.

이름 설명 필수
set-body 해결 프로그램의 HTTP 응답에서 본문을 설정합니다. 아니요
xml-to-json 해결 프로그램의 HTTP 응답을 XML에서 JSON으로 변환합니다. 아니요
find-and-replace 해결 프로그램의 HTTP 응답에서 부분 문자열을 찾아 다른 부분 문자열로 바꿉니다. 아니요
publish-event GraphQL API 스키마에 지정된 하나 이상의 구독에 이벤트를 게시합니다. 아니요
include-fragment 정책 정의에 정책 조각을 삽입합니다. 헤더가 여러 개 있는 경우 추가 include-fragment 요소를 추가합니다. 아니요

사용

사용법 참고 사항

  • 이 정책을 사용하여 해결 프로그램을 구성하고 관리하려면 GraphQL 해결 프로그램 구성을 참조하세요.
  • 이 정책은 스키마의 일치하는 GraphQL 작업 형식에서 단일 필드를 확인할 때만 호출됩니다.

예제

GraphQL 쿼리 해결 프로그램

다음 예는 백 엔드 데이터 원본에 대한 HTTP GET 호출을 수행하여 쿼리를 해결합니다.

스키마 예제

type Query {
    users: [User]
}

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

예제 정책

<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>

유동 템플릿을 사용하여 목록을 반환하는 GraqhQL 쿼리용 해결 프로그램

다음 예에서는 set-body 정책에서 사용하도록 지원되는 유동 템플릿을 사용하여 쿼리에 대한 HTTP 응답의 목록을 반환합니다. 또한 REST API의 응답에 있는 username 필드의 이름을 GraphQL 응답의 name으로 변경합니다.

스키마 예제

type Query {
    users: [User]
}

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

예제 정책

<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 변형에 대한 해결 프로그램

다음 예는 HTTP 데이터 원본에 POST 요청을 하여 데이터를 삽입하는 변형을 해결합니다. HTTP 요청의 set-body 정책에 있는 정책 식은 GraphQL 쿼리에서 본문으로 전달되는 name 인수를 수정합니다. 전송되는 본문은 다음 JSON과 같습니다.

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

스키마 예제

type Query {
    users: [User]
}

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

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

예제 정책

<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 공용 구조체 형식에 대한 확인자

다음 예제에서는 백 엔드 데이터 원본에 대한 HTTP GET 호출을 수행하여 orderById 쿼리를 확인하고 고객 ID 및 형식을 포함하는 JSON 개체를 반환합니다. 고객 유형은 RegisteredCustomerGuestCustomer 형식의 공용 구조체입니다.

스키마 예제

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!
}

예제 정책

이 예제에서는 외부 원본의 고객 결과를 모의하고 페치된 결과를 set-body 정책에 하드 코드합니다. __typename 필드는 고객의 유형을 결정하는 데 사용됩니다.

<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>

정책 작업에 대한 자세한 내용은 다음을 참조하세요.