해결 프로그램을 위한 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 개체를 반환합니다. 고객 유형은 RegisteredCustomer
및 GuestCustomer
형식의 공용 구조체입니다.
스키마 예제
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>
관련 정책
관련 콘텐츠
정책 작업에 대한 자세한 내용은 다음을 참조하세요.
- 자습서: API 변환 및 보호
- 정책 문 및 해당 설정에 대한 전체 목록에 대한 정책 참조
- 정책 식
- 정책 설정 또는 편집
- 정책 구성 재사용
- 정책 코드 조각 리포지토리
- Azure의 Microsoft Copilot을 사용하는 작성자 정책