Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào
tài liệu Apigee X. thông tin
Flow là thành phần cơ bản của các proxy API. Luồng cho phép bạn lập trình hành vi của một API bằng cách cho phép bạn định cấu hình trình tự mà các chính sách và mã được thực thi bởi một proxy API.
Để biết thông tin tổng quan về khái niệm của các luồng, hãy xem bài viết Kiểm soát cách một proxy thực thi bằng các luồng.
Chủ đề này mô tả cách tạo luồng có điều kiện và thêm logic (chính sách) vào luồng ở cấp độ cao. Nghệ thuật tạo điều kiện bao gồm nhiều chi tiết hơn những gì được đề cập trong chủ đề này. Để biết thông tin chi tiết, hãy xem phần Tổng quan về các biến của luồng và Điều kiện với các biến của luồng.
Đính kèm chính sách vào luồng
Edge có nhiều loại chính sách được xác định trước để triển khai bảo mật, quản lý lưu lượng truy cập và thao tác với thông báo. Ngoài ra, các chính sách cho phép bạn thêm mã tuỳ chỉnh của riêng mình để tuỳ chỉnh hoàn toàn quá trình xử lý thông báo.
Ví dụ:
- Đính kèm chính sách bảo mật OAuth vào PreFlow yêu cầu của ProxyEndpoint. Vì PreFlow của ProxyEndpoint là luồng đầu tiên trong quy trình, nên bạn có thể từ chối ngay một yêu cầu nếu yêu cầu đó vi phạm chính sách bảo mật của bạn.
- Đính kèm chính sách chuyển đổi JSON sang XML vào phản hồi PostFlow của TargetEndpoint để chuyển đổi phản hồi từ JSON sang XML.
- Đính kèm chính sách JavaScript vào Luồng có điều kiện của ProxyEndpoint để thực thi mã JavaScript nhằm xử lý yêu cầu
Sau khi bạn tạo một luồng có điều kiện, bạn có thể đính kèm chính sách vào luồng đó. Khi chọn luồng, hãy nhấp vào biểu tượng + Bước trong sơ đồ yêu cầu hoặc phản hồi để thêm một chính sách mới hoặc hiện có vào luồng.


Bằng cách đính kèm chính sách vào luồng đã chọn, bạn đang định cấu hình proxy API để chỉ thực thi chính sách Hạn mức đối với các yêu cầu được thực hiện cho tổ hợp động từ và URI của luồng đó. Ví dụ: nếu bạn đính kèm chính sách vào quy trình learn (tìm hiểu) trong yêu cầu, thì XML sau đây sẽ được tạo trong chế độ xem mã của trình chỉnh sửa proxy:
<ProxyEndpoint name="default">
...
<Flow name="issue">
<Description/>
<Request>
<Step>
<Name>Quota-2</Name>
</Step>
</Request>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition>
</Flow>
...
</ProxyEndpoint>Trong cấu hình này, nếu một yêu cầu GET xuất hiện trên proxy API với mẫu URI là .../issue/** (/issue/ với mọi nội dung trong URI sau dấu gạch chéo về phía trước cuối cùng), thì hạn mức sẽ được thực thi trên lệnh gọi API đó.
Giới thiệu về quy trình có điều kiện
Mọi chính sách được đính kèm vào PreFlow hoặc PostFlow luôn được thực thi. Tuy nhiên, các chính sách trong một quy trình có điều kiện chỉ được thực thi nếu điều kiện của quy trình đánh giá là đúng.
Trong quá trình xử lý yêu cầu và phản hồi, chỉ một luồng có điều kiện được thực thi trên mỗi phân đoạn – luồng đầu tiên có điều kiện được đánh giá là đúng. Điều đó có nghĩa là bạn có thể thực thi một luồng có điều kiện trong mỗi luồng sau:
- Quy trình yêu cầu của ProxyEndpoint
- Quy trình yêu cầu của TargetEndpoint
- Quy trình phản hồi của ProxyEndpoint
- Quy trình phản hồi của TargetEndpoint
Video: Xem một video ngắn để tìm hiểu thêm về quy trình có điều kiện.
Ví dụ: định nghĩa ProxyEndpoint sau đây cho thấy một luồng có điều kiện được ProxyEndpoint thực thi trên mọi yêu cầu HTTP GET đối với API proxy:
<ProxyEndpoint name="default">
<PreFlow>
<Request/>
<Response/>
</PreFlow>
<Flows>
<Flow name="Flow-1">
<Condition>request.verb="GET"</Condition>
<Request/>
<Response/>
</Flow>
</Flows>
<PostFlow>
<Request/>
<Response/>
</PostFlow>
...
</ProxyEndpoint>Xin lưu ý rằng điều kiện này tham chiếu đến request.verb biến luồng. Biến luồng là các tham chiếu được đặt tên, lưu giữ thông tin trạng thái được liên kết với một giao dịch API do Edge xử lý. Edge xác định nhiều biến trạng thái mà bạn có thể tham chiếu.
Các dịch vụ RESTful là tập hợp các tài nguyên API. Tài nguyên API là một đoạn đường dẫn URI xác định một số thực thể mà nhà phát triển có thể truy cập bằng cách gọi API của bạn. Ví dụ: nếu phần phụ trợ dịch vụ của bạn cung cấp báo cáo thời tiết và dự báo thời tiết, thì API của bạn có thể xác định 2 luồng có điều kiện ánh xạ đến các tài nguyên API đó: /reports và /forecasts. Khi một lệnh gọi API bao gồm một trong những tài nguyên đó trong URL, điều kiện sẽ đánh giá thành true và logic được đính kèm vào luồng có điều kiện sẽ được thực thi.
Sau đó, nhà phát triển ứng dụng sẽ truy cập vào tài nguyên của bạn bằng cách gửi yêu cầu đến một URL theo dạng:
http://myAPIs.myCo.com/weather/reports
hoặc:
http://myAPIs.myCo.com/weather/forecasts
Trong một proxy API, bạn có thể xác định một luồng có điều kiện tương ứng với một tài nguyên cụ thể:
<ProxyEndpoint name="default">
<PreFlow>
<Request/>
<Response/>
</PreFlow>
<Flows>
<Flow name="Flow-1">
<Condition>(proxy.pathsuffix MatchesPath "/reports")</Condition>
<Request/>
<Response/>
</Flow>
<Flow name="Flow-2">
<Condition>(proxy.pathsuffix MatchesPath "/forecasts")</Condition>
<Request/>
<Response/>
</Flow>
</Flows>
<PostFlow>
<Request/>
<Response/>
</PostFlow>
...
</ProxyEndpoint>Trong ví dụ này, bạn tham chiếu biến luồng proxy.pathsuffix, chứa phần hậu tố của URL dùng để truy cập vào proxy API. Sau đó, bạn có thể đính kèm các chính sách khác nhau vào luồng có điều kiện cho từng tài nguyên.
Thêm một quy trình có điều kiện
Trong ví dụ ngắn gọn này, bạn thiết lập một luồng chỉ thực thi khi thông báo yêu cầu là HTTP GET.
Để thêm một luồng có điều kiện, hãy chọn thẻ Phát triển trong trình tạo proxy API.

Nhấp vào biểu tượng + trong điểm cuối mong muốn.

Biểu mẫu New Conditional Flow (Luồng có điều kiện mới) cho phép bạn đặt tên cho luồng và định cấu hình một điều kiện. Trong ví dụ sau, bạn sẽ thêm một điều kiện đơn giản để đánh giá HTTP của thông báo yêu cầu cho một động từ GET (thay vì PUT, POST, v.v.) trên mọi URI sau đường dẫn cơ sở.

(Tìm hiểu cách tạo câu lệnh có điều kiện trong Các biến và điều kiện trong Flow.)
Giờ đây, quy trình mới có tên là Flow-1 sẽ xuất hiện trong trình đơn Navigator.

Bây giờ, hãy quan sát cấu hình XML cho ProxyEndpoint. Chọn Flow-1 trong trình đơn Navigator (Trình điều hướng).
Bạn sẽ thấy cấu hình sau.
<PreFlow name="PreFlow">
<Request/>
<Response/>
</PreFlow>
<Flows>
<Flow name="Flow-1">
<Request/>
<Response/>
<Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
</Flow>
</Flows>
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>Các bước tiếp theo
Các chủ đề sau đây cung cấp thông tin chi tiết hơn về cách tạo điều kiện và sử dụng các biến: