Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Flow là thành phần cơ bản của proxy API. Flow cho phép bạn lập trình hành vi của API bằng cách cho phép bạn định cấu hình trình tự thực thi các chính sách và mã proxy.
Để biết thông tin tổng quan về luồng, hãy xem phần Kiểm soát cách proxy thực thi bằng flow.
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 các luồng tại cấp cao. Nghệ thuật tạo ra các điều kiện liên quan đến nhiều chi tiết hơn những gì được đề cập trong chủ đề. Để biết thông tin chi tiết đó, hãy xem bài viết Tổng quan về luồng biến và Điều kiện bằng các biến luồng.
Đính kèm chính sách vào luồng
Edge đi kèm với nhiều loại chính sách định sẵn khác nhau để triển khai tính năng bảo mật, quản lý và thao túng 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 vào tuỳ chỉnh toàn bộ tính năng xử lý tin nhắn.
Ví dụ:
- Đính kèm chính sách bảo mật OAuth vào yêu cầu PreFlow của ProxyEndpoint. Vì Yêu cầu PreFlow của ProxyEndpoint là luồng đầu tiên trong quy trình, bạn có thể ngay lập tức từ chối 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 chính sách có điều kiện Luồng ProxyEndpoint để thực thi mã JavaScript nhằm xử lý yêu cầu
Sau khi tạo một quy trình có điều kiện, bạn sẽ có thể đính kèm quy trình này để đính kèm chính sách. Theo luồng đã chọn, 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 chính sách mới hoặc hiện có vào quy trình.
Bằng cách đính kèm chính sách này vào quy trình đã chọn, bạn sẽ định cấu hình proxy API để thực thi chính sách Chính sách về hạn mức chỉ dành cho các yêu cầu được gửi đến tổ hợp động từ và URI luồng đó. Ví dụ: nếu bạn đính kèm chính sách này vào quy trình learn (tìm hiểu) trong yêu cầu, tệp XML sau đây đượ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 yêu cầu GET xuất hiện trên proxy API có URI mẫu .../issue/** (/issue/ với bất kỳ vấn đề nào trong URI sau hộp thư chuyển tiếp gần nhất dấu gạch chéo), hạn mức sẽ được thực thi trên lệnh gọi API đó.
Giới thiệu về luồng có điều kiện
Mọi chính sách được đính kèm với PreFlow hoặc PostFlow đều luôn được thực thi. Tuy nhiên, các chính sách trong luồng có điều kiện chỉ được thực thi nếu điều kiện của luồng có giá trị là true.
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à true. Điều đó có nghĩa là bạn có thể có luồng có điều kiện được thực thi trong mỗi quy tắc:
- 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 video ngắn để tìm hiểu thêm về luồng 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 thực thi
bởi ProxyEndpoint vào bất kỳ yêu cầu HTTP GET
nào đến proxy API:
<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>
Lưu ý rằng điều kiện tham chiếu đến luồng request.verb biến. Biến luồng có tên là các tham chiếu chứa thông tin trạng thái được liên kết bằng 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.
Dịch vụ RESTful là tập hợp các tài nguyên API. Tài nguyên API là một mảnh đườ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ụ cung cấp các báo cáo thời tiết và dự báo thời tiết, API của bạn có thể xác định hai
flow có điều kiện liên kết đến các API đó
tài nguyên: /reports
và /forecasts
. Khi lệnh gọi API
bao gồm một trong các tài nguyên đó trong URL, điều kiện được đánh giá là true và logic
gắn với luồng có điều kiện sẽ được thực thi.
Sau đó, nhà phát triển ứng dụng truy cập vào tài nguyên của bạn bằng cách đưa ra yêu cầu tới một URL trong biểu mẫu:
http://myAPIs.myCo.com/weather/reports
hoặc:
http://myAPIs.myCo.com/weather/forecasts
Trong proxy API, bạn có thể xác định luồng có điều kiện tương ứng với một tài nguyên:
<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 đến biến luồng proxy.pathsuffix
,
chứa phần hậu tố của URL dùng để truy cập proxy API. Sau đó, bạn có thể đính kèm
các chính sách khác nhau đối với luồng có điều kiện cho từng tài nguyên.
Thêm 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 quy trình chỉ thực thi khi thông báo yêu cầu là một HTTP GET.
Để thêm một quy trình có điều kiện, hãy chọn thẻ Develop (Phát triển) trong trình tạo proxy API.
Nhấp vào biểu tượng dấu + trong điểm cuối mong muốn.
Biểu mẫu 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
trong ví dụ sau: bạn thêm một điều kiện đơn giản đánh giá HTTP của thông báo yêu cầu đối với
động từ GET
(trái ngược với PUT
, POST
, v.v.) trên bất kỳ URI nào sau đường dẫn cơ sở.
(Tìm hiểu cách tạo câu lệnh có điều kiện trong Biến luồng và điều kiện.)
Flow mới, có tên là Flow-1, hiện xuất hiện trong Trình đơn điều hướng.
Bây giờ, hãy quan sát cấu hình XML cho ProxyEndpoint. Chọn Flow-1 trong Trình đơn Đ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êm thông tin chi tiết về cách xây dựng các điều kiện và cách sử dụng biến: