Phản mẫu: Sử dụng Chính sách chú thích dịch vụ để gọi một dịch vụ phụ trợ trong Proxy API không mục tiêu

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

Proxy API là một mặt tiền được quản lý cho các dịch vụ phụ trợ. Cấu hình proxy API cơ bản bao gồm ProxyEndpoint (xác định URL của proxy API) và TargetEndpoint (xác định URL của dịch vụ phụ trợ).

Apigee Edge cung cấp nhiều tính năng linh hoạt để xây dựng hành vi phức tạp trên mẫu này. Ví dụ: bạn có thể thêm chính sách để kiểm soát cách API xử lý yêu cầu ứng dụng trước khi gửi phản hồi đó với dịch vụ phụ trợ hoặc thao túng phản hồi nhận được từ dịch vụ phụ trợ trước khi và chuyển tiếp email đó đến máy khách. Bạn có thể gọi các dịch vụ khác bằng cách sử dụng chính sách chú thích dịch vụ, thêm hành vi tuỳ chỉnh bằng cách thêm mã JavaScript và thậm chí là tạo một proxy API không gọi dịch vụ phụ trợ.

Phản mẫu

Sử dụng chú thích dịch vụ để gọi dịch vụ phụ trợ trong proxy API mà không có tuyến đến điểm cuối đích khả thi về mặt kỹ thuật nhưng sẽ làm mất dữ liệu phân tích về hiệu suất của dịch vụ bên ngoài.

Proxy API không chứa các tuyến mục tiêu có thể hữu ích trong trường hợp bạn không cần chuyển tiếp thông báo yêu cầu đến TargetEndpoint. Thay vào đó, ProxyEndpoint thực hiện tất cả những gì cần thiết đang xử lý. Ví dụ: ProxyEndpoint có thể truy xuất dữ liệu từ hoạt động tra cứu đến kho khoá/giá trị và trả về phản hồi mà không cần gọi dịch vụ phụ trợ.

Bạn có thể xác định một Tuyến rỗng trong proxy API, như minh hoạ dưới đây:

<RouteRule name="noroute"/>

Một proxy sử dụng tuyến rỗng là tình trạng "không có mục tiêu" vì nó không gọi dịch vụ phụ trợ mục tiêu.

Về mặt kỹ thuật, bạn có thể thêm chú thích dịch vụ vào một proxy không có mục tiêu để gọi một dịch vụ bên ngoài, như trong ví dụ dưới đây:

<!-- /antipatterns/examples/service-callout-no-target-1.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request>
            <Step>
                <Name>ServiceCallout-InvokeBackend</Name>
            </Step>
        </Request>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/no-target-proxy</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="noroute"/>
</ProxyEndpoint>

Tuy nhiên, proxy không thể cung cấp thông tin phân tích về hành vi của dịch vụ bên ngoài (chẳng hạn như thời gian xử lý hoặc tỷ lệ lỗi), khiến việc đánh giá hiệu suất của dịch vụ bên ngoài trở nên khó khăn.

Tác động

  • Thông tin phân tích về hoạt động tương tác với dịch vụ bên ngoài ( mã lỗi, thời gian phản hồi, không có hiệu suất mục tiêu, v.v.)
  • Mọi logic cụ thể cần thiết trước hoặc sau khi gọi chú thích dịch vụ đều được bao gồm dưới dạng của logic proxy chung, khiến khó hiểu và khó sử dụng lại hơn.

Phương pháp hay nhất

Nếu proxy API chỉ tương tác với một dịch vụ bên ngoài, thì proxy phải tuân theo mẫu thiết kế, trong đó dịch vụ phụ trợ được xác định là điểm cuối mục tiêu của proxy API. Một proxy không có quy tắc định tuyến tới một điểm cuối đích thì không được gọi dịch vụ phụ trợ bằng chính sách ServiceAnnotation.

Cấu hình proxy sau đây triển khai hành vi tương tự như ví dụ ở trên, nhưng tuân thủ tốt nhất thực tiễn:

<!-- /antipatterns/examples/service-callout-no-target-2.xml -->
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
    <Description/>
    <FaultRules/>
    <PreFlow name="PreFlow">
        <Request/>
        <Response/>
    </PreFlow>
    <PostFlow name="PostFlow">
        <Request/>
        <Response/>
    </PostFlow>
    <Flows/>
    <HTTPProxyConnection>
        <BasePath>/simple-proxy-with-route-to-backend</BasePath>
        <Properties/>
        <VirtualHost>secure</VirtualHost>
    </HTTPProxyConnection>
    <RouteRule name="default">
        <TargetEndpoint>default</TargetEndpoint>
    </RouteRule>
</ProxyEndpoint>

Sử dụng Chú thích dịch vụ để hỗ trợ các tình huống kết hợp, trong đó bạn muốn gọi các dịch vụ bên ngoài trước đó hoặc sau khi gọi điểm cuối đích. Chú thích dịch vụ không nhằm thay thế điểm cuối đích lời gọi.

Tài liệu đọc thêm