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. Flows 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à theo đó 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 luồng, hãy xem phần Kiểm soát cách một proxy thực thi với 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 liên quan đến nhiều chi tiết hơn so với những nội dung được đề cập trong chủ đề này. Để biết thông tin chi tiết đó, hãy xem bài viết Tổng quan về biến luồng và Các điều kiện có biến 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 tính năng 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 toàn bộ quy trình xử lý thông báo.
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à quy trình đầu tiên trong quy trình, bạn có thể từ chối ngay yêu cầu nếu yêu cầu đó vi phạm chính sách bảo mật của mình.
- Đính kèm chính sách chuyển đổi JSON sang XML vào PostFlow phản hồi 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 quy trình có điều kiện, bạn có thể đính kèm quy trình đó vào chính sách. 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 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 cho các yêu cầu được thực hiện đối với URI luồng và tổ hợp động từ đó. 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, thì tệp XML sau đây sẽ được tạo trong khung hiển thị 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ó mẫu URI là .../issue/** (/issue/ với bất kỳ nội dung nào trong URI sau dấu gạch chéo lên 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ề luồng có điều kiện
Mọi chính sách đí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 đánh giá là đúng.
Trong quá trình xử lý yêu cầu và phản hồi, mỗi phân đoạn chỉ thực thi một luồng có điều kiện – luồng đầu tiên có điều kiện đá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:
- 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 hiển thị một quy trình có điều kiện được ProxyEndpoint thực thi trên 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 này tham chiếu đến biến flow request.verb. Biến flow là các tệp tham chiếu được đặt tên chứa thông tin trạng thái 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.
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ợ của dịch vụ cung cấp báo cáo thời tiết và thông tin dự báo thời tiết, thì API của bạn có thể xác định hai luồng có điều kiện liên kết với các tài nguyên API đó: /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 đó sẽ được đánh giá là true và logic đi kèm với 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 ở dạng:
http://myAPIs.myCo.com/weather/reports
hoặc:
http://myAPIs.myCo.com/weather/forecasts
Trong 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 đến biến flow 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 luồng có điều kiện
Trong ví dụ ngắ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à một 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 dấu + 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 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 động từ GET
(thay vì 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 và điều kiện của Flow.)
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 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êm thông tin chi tiết về cách tạo điều kiện và sử dụng biến: