Chính sách Chú thích dịch vụ

Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về Apigee X.
thông tin

Nội dung

Chính sách Chú thích dịch vụ cho phép bạn gọi đến một dịch vụ khác từ quy trình proxy API. Bạn có thể tạo chú thích cho dịch vụ bên ngoài (chẳng hạn như điểm cuối của dịch vụ RESTful bên ngoài) hoặc các dịch vụ nội bộ (chẳng hạn như proxy API trong cùng tổ chức và môi trường).

  • Trong trường hợp sử dụng bên ngoài, bạn tạo chú thích cho một API bên thứ ba bên ngoài proxy của bạn. Phản hồi từ API của bên thứ ba được phân tích cú pháp và chèn vào thông báo phản hồi của API, làm phong phú và "hợp nhất" dữ liệu cho người dùng cuối của ứng dụng. Bạn cũng có thể gửi yêu cầu bằng chính sách Chú thích dịch vụ trong quy trình yêu cầu, sau đó truyền thông tin trong phản hồi đến TargetEndpoint của proxy API.
  • Trong một trường hợp sử dụng khác, bạn có thể gọi một proxy ở cùng tổ chức và môi trường với proxy mà bạn đang dùng để gọi. Ví dụ: bạn có thể thấy điều này hữu ích khi có một proxy cung cấp một số chức năng cấp thấp riêng biệt mà một hoặc nhiều proxy khác sẽ sử dụng. Ví dụ: một proxy hiển thị các thao tác tạo/đọc/cập nhật/xoá bằng một kho dữ liệu phụ trợ có thể là proxy mục tiêu cho nhiều proxy khác hiển thị dữ liệu cho ứng dụng.

Chính sách này hỗ trợ các yêu cầu qua HTTP và HTTPS.

Mẫu

Cuộc gọi cục bộ tới proxy nội bộ

<LocalTargetConnection>
    <APIProxy>data-manager</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

Ví dụ này tạo một chú thích cho một proxy API cục bộ (tức là một proxy trong cùng tổ chức và môi trường) có tên là data-manager, chỉ định điểm cuối proxy có tên là default.

URL dưới dạng biến

<HTTPTargetConnection>
    <URL>http://example.com/{request.myResourcePath}</URL>
</HTTPTargetConnection>

Ví dụ này sử dụng một biến trong URL để tự động điền URL của mục tiêu. Một biến không thể chỉ định phần giao thức của URL, http://. Ngoài ra, bạn phải sử dụng các biến riêng cho phần miền của URL và cho phần còn lại của URL.

Mã hoá địa lý của Google / xác định yêu cầu

<ServiceCallout name="ServiceCallout-GeocodingRequest1">
    <DisplayName>Inline request message</DisplayName>
    <Request variable="authenticationRequest">
      <Set>
        <QueryParams>
          <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
          <QueryParam name="region">{request.queryparam.country}</QueryParam>
          <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
      </Set>
    </Request>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>
http://maps.googleapis.com/maps/api/geocode/json

Thay vì sử dụng một chính sách như Chỉ định thông báo để tạo đối tượng yêu cầu, bạn có thể xác định đối tượng đó ngay trong chính sách Chú thích dịch vụ. Trong ví dụ này, chính sách Chú thích dịch vụ đặt giá trị của 3 tham số truy vấn được chuyển đến dịch vụ bên ngoài. Bạn có thể tạo toàn bộ thông báo yêu cầu trong chính sách Chú thích dịch vụ để chỉ định tải trọng, loại mã hoá như application/xml, tiêu đề, tham số biểu mẫu, v.v.

Dưới đây là một ví dụ khác về yêu cầu được hình thành trước khi bạn tuân thủ chính sách về Chú thích dịch vụ.

<ServiceCallout name="ServiceCallout-GeocodingRequest2">
    <Request clearPayload="false" variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
      <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

Nội dung của thông báo yêu cầu được trích xuất từ một biến có tên là GeocodingRequest (có thể được điền, ví dụ: bằng chính sách allocationsMessage). Thông báo phản hồi được gán cho biến có tên là GeocodingResponse, trong đó biến có sẵn để được phân tích cú pháp bằng chính sách Extract Variables hoặc bằng mã tuỳ chỉnh được viết bằng JavaScript hoặc Java. Chính sách này sẽ chờ 30 giây để nhận phản hồi từ API mã hoá địa lý của Google trước khi hết thời gian chờ.

Để có một proxy API mẫu hoàn chỉnh sử dụng Ví dụ về Chú thích dịch vụ này, cùng với các chính sách Chỉ định thông báo và Trích xuất biến, hãy xem phần Sử dụng cấu trúc của chính sách.

Máy chủ đích của cuộc gọi

<ServiceCallout async="false" continueOnError="false" enabled="true" name="service-callout">
    <DisplayName>service-callout</DisplayName>
    <Properties/>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    </Request>
    <Response>myResponse</Response>
    <HTTPTargetConnection>
        <LoadBalancer>
            <Algorithm>RoundRobin</Algorithm>
            <Server name="httpbin"/>
            <Server name="yahoo"/>
        </LoadBalancer>
        <Path>/get</Path>
    </HTTPTargetConnection>
</ServiceCallout>

Chính sách này sử dụng thuộc tính Load Balancer để gọi các máy chủ mục tiêu và cân bằng tải trên các máy chủ đó. Trong ví dụ này, tải được phân bổ trên hai máy chủ đích có tên là "httpbin" và "yahoo". Để biết thông tin về cách thiết lập Máy chủ mục tiêu cho proxy của bạn và định cấu hình cân bằng tải, hãy xem bài viết Cân bằng tải trên các máy chủ phụ trợ.


Giới thiệu về Chính sách chú thích dịch vụ

Có nhiều trường hợp bạn có thể sử dụng chính sách Chú thích dịch vụ trong proxy API. Ví dụ: bạn có thể định cấu hình proxy API để thực hiện cuộc gọi tới một dịch vụ bên ngoài nhằm cung cấp dữ liệu định vị vị trí, bài đánh giá của khách hàng, các mặt hàng trong danh mục bán lẻ của đối tác, v.v.

Chú thích thường được sử dụng với 2 chính sách khác: Chỉ định thông báo và Trích xuất biến.

  • Request (Yêu cầu): Chỉ định thông báo sẽ điền thông báo yêu cầu gửi đến dịch vụ từ xa.
  • Phản hồi: Trích xuất các biến phân tích cú pháp phản hồi và trích xuất nội dung cụ thể.

Thành phần thông thường của chính sách Chú thích dịch vụ bao gồm:

  1. Gán chính sách Thông báo: Tạo một thông báo yêu cầu, điền tiêu đề HTTP, tham số truy vấn, đặt động từ HTTP, v.v.
  2. Chính sách Chú thích dịch vụ: Tham chiếu đến một thông báo được tạo theo chính sách Chỉ định thông báo, xác định URL mục tiêu cho lệnh gọi bên ngoài và đặt tên cho đối tượng phản hồi mà dịch vụ mục tiêu trả về.

    Để cải thiện hiệu suất, bạn cũng có thể lưu các phản hồi về Chú thích dịch vụ vào bộ nhớ đệm, như mô tả trong chuỗi bài đăng này trên Cộng đồng Apigee: https://community.apigee.com/questions/34110/how-can-i-store-the-results-of-the-servicecallout.html.
  3. Chính sách Trích xuất biến: Thường xác định biểu thức JSONPath hoặc XPath phân tích cú pháp thông báo do Chú thích dịch vụ tạo ra. Sau đó, chính sách này sẽ đặt các biến chứa giá trị được phân tích cú pháp từ phản hồi Chú thích dịch vụ.

Xem phần Sử dụng thành phần của chính sách để biết một proxy API mẫu hoàn chỉnh sử dụng chính sách Chú thích dịch vụ cùng với các chính sách Chỉ định thông báo và Trích xuất biến.

Xử lý lỗi tuỳ chỉnh

Tham chiếu phần tử

Dưới đây là các phần tử và thuộc tính mà bạn có thể thiết lập trong chính sách này:

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">
    <DisplayName>Custom label used in UI</DisplayName>
    <Request clearPayload="true" variable="myRequest">
        <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
        <Remove>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
         </Remove>
         <Copy>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Copy>
        <Add>
            <Headers/>
            <QueryParams/>
            <FormParams/>
        </Add>
        <Set>
            <Headers/>
            <QueryParams/>
            <FormParams/>
            <Payload/>
            <ReasonPhrase/>
            <StatusCode/>
            <Path/>
            <Version/>
            <Verb/>
        </Set>
    </Request>
    <Response>calloutResponse</Response>
    <Timeout>30000</Timeout>
    <HTTPTargetConnection>
        <URL>http://example.com</URL>
        <LoadBalancer/>
        <SSLInfo/>
        <Properties/>
    </HTTPTargetConnection>
    <LocalTargetConnection>
        <APIProxy/>
        <ProxyEndpoint/>
        <Path/>
    </LocalTargetConnection>
</ServiceCallout>

Thuộc tính <ServiceTool>

<ServiceCallout async="false" continueOnError="false" enabled="true" name="Service-Callout-1">

Bảng sau đây mô tả các thuộc tính chung cho tất cả phần tử mẹ của chính sách:

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
name

Tên nội bộ của chính sách. Giá trị của thuộc tính name có thể chứa chữ cái, số, dấu cách, dấu gạch nối, dấu gạch dưới và dấu chấm. Giá trị này không được vượt quá 255 ký tự.

Nếu muốn, bạn có thể sử dụng phần tử <DisplayName> để gắn nhãn cho chính sách này trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên ngôn ngữ tự nhiên khác.

Không áp dụng Bắt buộc
continueOnError

Đặt thành false để trả về lỗi khi một chính sách không hoạt động. Đây là hành vi dự kiến đối với hầu hết các chính sách.

Đặt thành true để quá trình thực thi luồng tiếp tục ngay cả khi chính sách không thành công.

false Không bắt buộc
enabled

Đặt thành true để thực thi chính sách.

Đặt thành false để tắt chính sách này. Chính sách này sẽ không được thực thi ngay cả khi chính sách vẫn được đính kèm vào một quy trình.

đúng Không bắt buộc
async

Thuộc tính này không được dùng nữa.

false Không được dùng nữa

Phần tử <DisplayName>

Sử dụng cùng với thuộc tính name để gắn nhãn cho chính sách trong trình chỉnh sửa proxy giao diện người dùng quản lý bằng tên khác theo ngôn ngữ tự nhiên.

<DisplayName>Policy Display Name</DisplayName>
Mặc định

Không áp dụng

Nếu bạn bỏ qua phần tử này, thì giá trị thuộc tính name của chính sách sẽ được sử dụng.

Sự hiện diện Không bắt buộc
Loại Chuỗi

Phần tử <Request>

Chỉ định biến chứa thông báo yêu cầu được gửi từ proxy API đến dịch vụ khác. Biến này có thể được tạo bằng chính sách trước đó trong quy trình hoặc bạn có thể tạo biến cùng dòng trong chính sách Chú thích dịch vụ.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <Remove>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Remove>
    <Copy>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Copy>
    <Add>
        <Headers/>
        <QueryParams/>
        <FormParams/>
    </Add>
    <Set>
        <Headers/>
        <QueryParams/>
        <FormParams/>
        <Payload/>
        <ReasonPhrase/>
        <StatusCode/>
        <Path/>
        <Version/>
        <Verb/>
    </Set>
</Request>

Cú pháp cho các thẻ <Remove>, <Copy>, <Add><Set> cũng giống như trong chính sách Chỉ định thông báo.

Chính sách này sẽ trả về lỗi nếu thông báo yêu cầu không giải quyết được hoặc thuộc loại thông báo yêu cầu không hợp lệ.

Trong ví dụ đơn giản nhất, bạn truyền một biến chứa thông báo yêu cầu đã được điền trước đó trong luồng proxy API:

<Request clearPayload="true" variable="myRequest"/>

Hoặc bạn có thể điền sẵn thông báo yêu cầu được gửi đến dịch vụ bên ngoài trong chính sách Chú thích dịch vụ:

<Request>
  <Set>
    <Headers>
      <Header name="Accept">application/json</Header>
    </Headers>
    <Verb>POST</Verb>
    <Payload contentType="application/json">{"message":"my test message"}</Payload>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request>
Mặc định Nếu bạn bỏ qua phần tử Yêu cầu hoặc bất kỳ thuộc tính nào của phần tử đó, Edge sẽ gán các giá trị mặc định sau:

<Request clearPayload="true" variable="servicecallout.request"/>

Hãy cùng xem ý nghĩa của các giá trị mặc định này. Thứ nhất, clearPayload=true có nghĩa là một đối tượng yêu cầu mới sẽ được tạo mỗi khi chính sách Chú thích dịch vụ thực thi. Điều này có nghĩa là yêu cầu và đường dẫn URI yêu cầu sẽ không bao giờ được sử dụng lại. Thứ hai, tên biến mặc định, servicecallout.request, là tên dành riêng được gán cho yêu cầu nếu bạn không cung cấp tên.

Điều quan trọng là phải biết về tên mặc định này nếu bạn đang sử dụng tính năng ẩn giấu dữ liệu – nếu bỏ qua tên biến, bạn cần thêm servicecallout.request vào cấu hình mặt nạ của mình. Ví dụ: nếu muốn che tiêu đề Uỷ quyền để tiêu đề này không xuất hiện trong các phiên Theo dõi, bạn cần thêm đoạn mã sau vào cấu hình ẩn giấu để thu thập tên mặc định:

servicecallout.request.header.Authorization.

Sự hiện diện Không bắt buộc.
Loại Không áp dụng

Thuộc tính

Thuộc tính Nội dung mô tả Mặc định Sự hiện diện
biến

Tên của biến sẽ chứa thông báo yêu cầu.

servicecallout.request Không bắt buộc
clearPayload

Nếu là true, biến chứa thông báo yêu cầu sẽ bị xoá sau khi yêu cầu được gửi đến đích HTTP để giải phóng bộ nhớ mà thông báo yêu cầu sử dụng.

Chỉ đặt tuỳ chọn clearPayload thành false nếu thông báo yêu cầu là bắt buộc sau khi thực thi Chú thích dịch vụ.

đúng Không bắt buộc

Phần tử <Request>/<IgnoreUnresolvedVariables>

Khi đặt thành true, chính sách này sẽ bỏ qua mọi lỗi biến chưa được giải quyết trong yêu cầu.

<Request clearPayload="true" variable="myRequest">
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</Request> 
Mặc định false
Sự hiện diện Không bắt buộc
Loại Boolean

Phần tử <Response>

Thêm phần tử này khi logic proxy API yêu cầu phản hồi từ lệnh gọi từ xa để xử lý thêm.

Khi có mặt, phần tử này sẽ chỉ định tên của biến chứa thông báo phản hồi nhận được từ dịch vụ bên ngoài. Phản hồi từ mục tiêu chỉ được gán cho biến khi chính sách đã đọc thành công toàn bộ phản hồi. Nếu lệnh gọi từ xa không thành công vì bất kỳ lý do gì, chính sách sẽ trả về một lỗi.

Nếu bạn bỏ qua phần tử này, proxy API sẽ không chờ phản hồi; việc thực thi luồng Proxy API sẽ tiếp tục với mọi bước tiếp theo trong quy trình. Ngoài ra, để nêu rõ rằng không có phần tử Response, phản hồi từ mục tiêu sẽ không có sẵn để xử lý qua các bước tiếp theo và không có cách nào để luồng proxy phát hiện lỗi trong lệnh gọi từ xa. Cách sử dụng phổ biến để bỏ qua phần tử Response khi sử dụng ServiceChú thích: để ghi thông điệp đến một hệ thống bên ngoài.

 <Response>calloutResponse</Response> 
Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Chuỗi

Phần tử <Timeout>

Thời gian tính bằng mili giây mà chính sách Chú thích dịch vụ sẽ chờ phản hồi từ mục tiêu. Bạn không thể đặt giá trị này động trong thời gian chạy. Nếu Chú thích dịch vụ hết thời gian chờ, thì HTTP 500 sẽ được trả về, chính sách sẽ không hoạt động và proxy API sẽ chuyển sang trạng thái lỗi, như mô tả trong phần Xử lý lỗi.

<Timeout>30000</Timeout>
Mặc định 55000 mili giây (55 giây), chế độ cài đặt thời gian chờ HTTP mặc định cho Apigee Edge
Sự hiện diện Không bắt buộc
Loại Số nguyên

Phần tử <HTTPTargetConnection>

Cung cấp thông tin truyền tải như các thuộc tính URL, TLS/SSL và HTTP. Hãy xem tài liệu tham khảo về cấu hình <TargetEndpoint>.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <LoadBalancer/>
    <SSLInfo/>
    <Properties/>
</HTTPTargetConnection>
Mặc định Không áp dụng
Sự hiện diện Bắt buộc
Loại Không áp dụng

Phần tử <HTTPTargetConnection>/<URL>

URL tới dịch vụ đang được gọi:

<HTTPTargetConnection>
    <URL>http://example.com</URL>
</HTTPTargetConnection>

Bạn có thể cung cấp một biến cho một phần của URL theo cách linh động. Tuy nhiên, một biến không thể chỉ định phần giao thức của URL, http:// bên dưới. Trong ví dụ tiếp theo, bạn sẽ sử dụng một biến để chỉ định giá trị của tham số truy vấn:

<URL>http://example.com/forecastrss?w=${request.header.woeid}</URL>

Hoặc đặt một phần đường dẫn URL bằng một biến:

<URL>http://example.com/{request.resourcePath}?w=${request.header.woeid}</URL>

Nếu bạn muốn sử dụng một biến để chỉ định miền và cổng của URL, hãy sử dụng một biến cho miền và cổng, còn một biến thứ hai cho bất kỳ phần nào khác của URL:

<URL>http://{request.dom_port}/{request.resourcePath}</URL>
Mặc định Không áp dụng
Sự hiện diện Bắt buộc
Loại Chuỗi

Phần tử <HTTPTargetConnection>/<SSLInfo>

Cấu hình TLS/SSL cho dịch vụ phụ trợ. Để được trợ giúp về cấu hình TLS/SSL, hãy xem phần Định cấu hình TLS từ Edge đến phần phụ trợ (Đám mây và Đám mây riêng tư) và "Cấu hình điểm cuối TLS/SSL" trong Tài liệu tham khảo về cấu hình proxy API.

<HTTPTargetConnection>
    <URL>https://example.com</URL>
    <SSLInfo>
        <Enabled>true</Enabled>
        <ClientAuthEnabled>true</ClientAuthEnabled>
        <KeyStore>ref://mykeystoreref</KeyStore>  ## Use of a reference is recommended
        <KeyAlias>myKey</KeyAlias>
        <TrustStore>myTruststore</TrustStore>
        <Ciphers/>
        <Protocols/>
    </SSLInfo>
</HTTPTargetConnection>
Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Không áp dụng

Phần tử <HTTPTargetConnection>/<Properties>

Các thuộc tính truyền tải HTTP đến dịch vụ phụ trợ. Để biết thêm thông tin, hãy xem Tài liệu tham khảo về thuộc tính điểm cuối.

<HTTPTargetConnection>
    <URL>http://example.com</URL>
    <Properties>
        <Property name="allow.http10">true</Property>
        <Property name="request.retain.headers">
          User-Agent,Referer,Accept-Language
        </Property>
    </Properties>
</HTTPTargetConnection>
Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Không áp dụng

Phần tử <HTTPTargetConnection>/<LoadLoadr>

Gọi một hoặc nhiều máy chủ mục tiêu và cân bằng tải trên các máy chủ đó. Xem mẫu Máy chủ đích của lệnh gọi trong phần Mẫu. Xem thêm bài viết Cân bằng tải trên các máy chủ phụ trợ. Hãy xem thêm bài đăng trên thẻ Cộng đồng này để thảo luận về cách gọi máy chủ đích từ cả chính sách Chú thích dịch vụ và quy tắc định tuyến.

<HTTPTargetConnection> <LoadBalancer> <Algorithm>RoundRobin</Algorithm> <Server name="httpbin"/> <Server name="yahoo"/> </LoadBalancer> <Path>/get</Path> </HTTPTargetConnection>
Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Không áp dụng

Phần tử <LocalTargetConnection>

Chỉ định một proxy cục bộ (tức là một proxy trong cùng tổ chức và môi trường) làm mục tiêu của chú thích dịch vụ.

Để chỉ định thêm mục tiêu, hãy sử dụng phần tử <APIProxy><ProxyEndpoint> hoặc phần tử <Path>.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
   <Path/>
</LocalTargetConnection>
Mặc định Không áp dụng
Sự hiện diện Bắt buộc
Loại Không áp dụng

Phần tử <LocalTargetConnection>/<APIProxy>

Tên của một proxy API là mục tiêu của cuộc gọi cục bộ. Proxy phải nằm trong cùng một tổ chức và môi trường với proxy thực hiện cuộc gọi.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

Cùng với phần tử <APIProxy>, hãy thêm phần tử <ProxyEndpoint> để chỉ định tên của điểm cuối proxy cần nhắm đến cho lệnh gọi.

<LocalTargetConnection>
   <APIProxy/>
   <ProxyEndpoint/>
</LocalTargetConnection> 
Mặc định Không áp dụng
Sự hiện diện Bắt buộc
Loại Chuỗi

Phần tử <LocalTargetConnection>/<ProxyEndpoint>

Tên của điểm cuối proxy phải là mục tiêu của cuộc gọi. Đây là một điểm cuối proxy trong proxy API được chỉ định bằng phần tử <APIProxy>.

<LocalTargetConnection>
   <APIProxy>data-manager</APIProxy>
   <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>
Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Không áp dụng

Phần tử <LocalTargetConnection>/<Path>

Đường dẫn đến điểm cuối đang được nhắm đến. Điểm cuối phải tham chiếu đến một proxy trong cùng một tổ chức và môi trường với proxy thực hiện lệnh gọi.

Hãy sử dụng cặp này thay vì cặp <APIProxy>/<ProxyEndpoint> khi bạn không biết hoặc không thể dựa vào tên proxy. Đường dẫn đó có thể là một mục tiêu đáng tin cậy.

<LocalTargetConnection>
   <Path>/data-manager</Path>
</LocalTargetConnection>
Mặc định Không áp dụng
Sự hiện diện Không bắt buộc
Loại Không áp dụng

Giản đồ

Biến luồng

Các biến luồng cho phép hành vi động của các chính sách và Luồng trong thời gian chạy, dựa trên tiêu đề HTTP, nội dung thông báo hoặc ngữ cảnh Luồng. Bạn có thể sử dụng các biến Flow được xác định trước sau đây sau khi thực thi chính sách Chú thích dịch vụ. Để biết thêm thông tin về biến Flow, hãy xem bài viết Tài liệu tham khảo về biến.

Chú thích dịch vụ có yêu cầu và phản hồi riêng và bạn có thể truy cập vào dữ liệu đó thông qua các biến. Vì thông báo chính đang sử dụng tiền tố biến request.*response.*, nên hãy sử dụng tiền tố myrequest.*calloutResponse.* (giá trị mặc định trong cấu hình Chú thích dịch vụ) để lấy dữ liệu thông báo dành riêng cho Chú thích dịch vụ. Ví dụ đầu tiên trong bảng sau cho thấy cách bạn sẽ nhận tiêu đề HTTP trong Chú thích dịch vụ.

Biến Nội dung mô tả

Sau đây là ví dụ về cách nhận tiêu đề phản hồi và yêu cầu Chú thích dịch vụ tương tự như cách bạn nhận tiêu đề từ yêu cầu và phản hồi chính.

calloutResponse.header.HeaderName

myRequest.header.HeaderName

trong đó calloutResponse là tên biến cho Phản hồi trong Chú thích dịch vụ và myRequest là tên biến cho Yêu cầu. Ví dụ:

calloutResponse.header.Content-Length

sẽ trả về tiêu đề Content-Length của phản hồi Chú thích dịch vụ.

Phạm vi: Từ Chú thích dịch vụ trở đi
Loại: Chuỗi
Quyền: Đọc/Ghi

Tiêu đề thông báo trong yêu cầu hoặc phản hồi Chú thích dịch vụ. Ví dụ: nếu mục tiêu proxy API là http://example.com và mục tiêu Chú thích dịch vụ là http://mocktarget.apigee.net, thì các biến này sẽ là tiêu đề của chú thích đến http://mocktarget.apigee.net.

servicecallout.requesturi

Phạm vi: Từ yêu cầu Chú thích dịch vụ trở đi
Loại: Chuỗi
Quyền: Đọc/Ghi

URI TargetEndpoint cho chính sách Chú thích dịch vụ. URI là URL TargetEndpoint không có thông số kỹ thuật về giao thức và miền.

servicecallout.{policy-name}.target.url

Phạm vi: Từ yêu cầu Chú thích dịch vụ trở đi
Loại: Chuỗi
Quyền: Đọc/Ghi

URL mục tiêu cho Chú thích dịch vụ.

calloutResponse.content

trong đó calloutResponse là tên biến <Response>trong cấu hình Chú thích dịch vụ.

Phạm vi: Từ phản hồi Chú thích dịch vụ trở đi
Loại: Chuỗi
Quyền: Đọc/Ghi

Nội dung phản hồi từ Chú thích dịch vụ.

servicecallout.{policy-name}.expectedcn

Phạm vi: Từ yêu cầu Chú thích dịch vụ trở đi
Loại: Chuỗi
Quyền: Đọc/Ghi

Tên chung dự kiến của TargetEndpoint như được đề cập trong chính sách Chú thích dịch vụ. Điều này chỉ có ý nghĩa khi TargetEndpoint tham chiếu đến một điểm cuối TLS/SSL.

servicecallout.{policy-name}.failed

Phạm vi: Từ phản hồi Chú thích dịch vụ trở đi
Loại: Boolean
Quyền: Đọc/Ghi

Giá trị boolean cho biết chính sách thành công, sai hay không thành công, đúng.

Lỗi

Phần này mô tả các mã lỗi và thông báo lỗi được trả về, cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này đóng vai trò quan trọng trong việc phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem Những điều bạn cần biết về lỗi chính sáchXử lý lỗi.

Lỗi thời gian chạy

Những lỗi này có thể xảy ra khi thực thi chính sách.

Mã lỗi Trạng thái HTTP Nguyên nhân Khắc phục
steps.servicecallout.ExecutionFailed 500

Lỗi này có thể xảy ra khi:

  • chính sách này được yêu cầu xử lý dữ liệu nhập không đúng định dạng hoặc không hợp lệ.
  • dịch vụ đích phụ trợ sẽ trả về trạng thái lỗi (theo mặc định là 4xx hoặc 5xx).
steps.servicecallout.RequestVariableNotMessageType 500 Biến Yêu cầu được chỉ định trong chính sách không thuộc loại Thông báo. Ví dụ: nếu đó là một chuỗi hoặc loại nội dung khác không phải thông báo, thì bạn sẽ thấy lỗi này.
steps.servicecallout.RequestVariableNotRequestMessageType 500 Biến Yêu cầu được chỉ định trong chính sách không thuộc loại Thông báo yêu cầu. Ví dụ: nếu đó là loại Phản hồi, thì bạn sẽ thấy lỗi này.

Lỗi triển khai

Những lỗi này có thể xảy ra khi bạn triển khai proxy chứa chính sách này.

Tên lỗi Nguyên nhân Khắc phục
URLMissing Phần tử <URL> bên trong <HTTPTargetConnection> bị thiếu hoặc để trống.
ConnectionInfoMissing Lỗi này xảy ra nếu chính sách không có phần tử <HTTPTargetConnection> hoặc <LocalTargetConnection>.
InvalidTimeoutValue Lỗi này xảy ra khi giá trị <Timeout> là số âm hoặc 0.

Biến lỗi

Các biến này được đặt khi xảy ra lỗi thời gian chạy. Để biết thêm thông tin, hãy xem Những điều bạn cần biết về lỗi chính sách.

Biến Trong đó Ví dụ:
fault.name="fault_name" fault_name là tên của lỗi, như liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. fault.name = "RequestVariableNotMessageType"
servicecallout.policy_name.failed policy_name là tên của chính sách báo lỗi do người dùng chỉ định. servicecallout.SC-GetUserData.failed = true

Ví dụ về phản hồi lỗi

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.servicecallout.RequestVariableNotMessageType"
      },
      "faultstring":"ServiceCallout[ServiceCalloutGetMockResponse]: 
            request variable data_str value is not of type Message"
   }
}

Ví dụ về quy tắc lỗi

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="RequestVariableNotMessageType">
    <Step>
        <Name>AM-RequestVariableNotMessageType</Name>
    </Step>
    <Condition>(fault.name = "RequestVariableNotMessageType")</Condition>
</FaultRule>

Chủ đề có liên quan