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
Tạo thông báo tuỳ chỉnh để phản hồi tình trạng lỗi. Sử dụng RaiseFault để xác định Phản hồi lỗi được trả về ứng dụng yêu cầu khi một điều kiện cụ thể phát sinh.
Để biết thông tin chung về cách xử lý lỗi, hãy xem phần Xử lý lỗi.
Mẫu
Trả về lỗi phản hồi
Trong trường hợp sử dụng phổ biến nhất, RaiseFault được dùng để trả về phản hồi lỗi tuỳ chỉnh cho
yêu cầu ứng dụng. Ví dụ: chính sách này sẽ trả về mã trạng thái 404
có
không có tải trọng:
<RaiseFault name="404"> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <FaultResponse> <Set> <StatusCode>404</StatusCode> <ReasonPhrase>The resource requested was not found</ReasonPhrase> </Set> </FaultResponse> </RaiseFault>
Trả về tải trọng của phản hồi lỗi
Một ví dụ phức tạp hơn liên quan đến việc trả về một tải trọng phản hồi lỗi tuỳ chỉnh cùng với HTTP và một mã trạng thái HTTP. Trong ví dụ sau, phản hồi lỗi được điền sẵn bằng thông báo XML chứa mã trạng thái HTTP mà Edge nhận được từ phần phụ trợ và tiêu đề có chứa loại lỗi đã xảy ra:
<RaiseFault name="ExceptionHandler"> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <FaultResponse> <Set> <Payload contentType="text/xml"> <root>Please contact support@company.com</root> </Payload> <StatusCode>{response.status.code}</StatusCode> <ReasonPhrase>Server error</ReasonPhrase> </Set> <Add> <Headers> <Header name="FaultHeader">{fault.name}</Header> </Headers> </Add> </FaultResponse> </RaiseFault>
Để biết danh sách tất cả biến có thể điền sẵn lỗi FaultResponse một cách linh động thông báo, hãy xem bảng Biến tham khảo
Xử lý lỗi chú thích dịch vụ
Giới thiệu về chính sách RaiseFault
Apigee Edge cho phép bạn xử lý ngoại lệ tuỳ chỉnh bằng chính sách thuộc loại RaiseFault. Chính sách RaiseFault, tương tự như Chính sách GánTin nhắn, cho phép bạn tạo phản hồi lỗi tuỳ chỉnh để phản hồi một điều kiện lỗi.
Sử dụng chính sách RaiseFault để xác định phản hồi lỗi được trả về ứng dụng yêu cầu khi một tình trạng lỗi cụ thể phát sinh. Phản hồi lỗi có thể bao gồm tiêu đề HTTP, truy vấn và tải trọng tin nhắn. Phản hồi lỗi tuỳ chỉnh có thể hữu ích hơn cho nhà phát triển ứng dụng và người dùng cuối của ứng dụng thay vì các thông báo lỗi chung hoặc mã phản hồi HTTP.
Khi được thực thi, chính sách RaiseFault sẽ chuyển quyền kiểm soát từ quy trình hiện tại sang Lỗi luồng, sau đó sẽ trả về phản hồi lỗi được chỉ định cho ứng dụng yêu cầu. Khi luồng thông báo sẽ chuyển sang luồng Lỗi, không xảy ra thêm quá trình xử lý chính sách nào. Tất cả mục còn lại Các bước xử lý bị bỏ qua và phản hồi lỗi được trả về trực tiếp cho yêu cầu .
Bạn có thể sử dụng RaiseFault trong ProxyEndpoint hoặc TargetEndpoint. Thông thường, bạn sẽ đính kèm Điều kiện đối với thuộc tính Chính sách RaiseFault. Sau khi RaiseFault thực thi, Apigee sẽ hoạt động bình thường xử lý lỗi, đánh giá FaultRules hoặc nếu không có quy tắc lỗi nào được xác định thì công cụ này sẽ chấm dứt quá trình xử lý của yêu cầu.
Tham chiếu phần tử
Tài liệu tham chiếu phần tử mô tả các thành phần và thuộc tính của chính sách RaiseFault.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1"> <DisplayName>RaiseFault 1</DisplayName> <FaultResponse> <AssignVariable> <Name/> <Value/> </AssignVariable> <Add> <Headers/> </Add> <Copy source="request"> <Headers/> <StatusCode/> <ReasonPhrase/> </Copy> <Remove> <Headers/> </Remove> <Set> <Headers/> <Payload/> <ReasonPhrase/> <StatusCode/> </Set> </FaultResponse> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </RaiseFault>
<RaiseFault> thuộc tính
<RaiseFault async="false" continueOnError="false" enabled="true" name="Raise-Fault-1">
Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:
Thuộc tính | 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 (Không bắt buộc) Bạn có thể dùng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành Đặt thành |
false | Không bắt buộc |
enabled |
Hãy đặt thành Đặt thà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 |
<DisplayName> phần tử
Hãy sử dụng cùng với thuộc tính name
để gắn nhãn chính sách trong phần
trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.
<DisplayName>Policy Display Name</DisplayName>
Mặc định |
Không áp dụng Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính |
---|---|
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
<IgnoreUnresolvedVariables> phần tử
(Không bắt buộc) Bỏ qua mọi lỗi biến chưa được giải quyết trong Luồng. Giá trị hợp lệ: true/false.
Mặc định true
.
<FaultResponse> phần tử
(Không bắt buộc) Xác định thông báo phản hồi được trả về cho ứng dụng yêu cầu. Các trường hợp sử dụng FaultResponse có cùng chế độ cài đặt như chính sách AssignmentsMessage (không có trong Apigee Edge dành cho Đám mây riêng tư).
<FaultResponse><AssignVariable> phần tử
Chỉ định một giá trị cho biến luồng đích.
Nếu biến luồng không tồn tại, thì AssignVariable
sẽ tạo biến đó.
Ví dụ: sử dụng mã sau đây để đặt biến có tên myFaultVar
trong chính sách RaiseFault:
<FaultResponse> <AssignVariable> <Name>myFaultVar</Name> <Value>42</Value> </AssignVariable> ... </FaultResponse>
Sau đó, bạn có thể tham chiếu đến biến đó trong các mẫu thông báo ở phần sau của chính sách RaiseFault. Ngoài ra, chính sách đính kèm với FaultRule khi đó có thể truy cập vào biến. Ví dụ: như sau Chính sách PagingMessage sử dụng biến được đặt trong RaiseFault để đặt Tiêu đề trong phản hồi lỗi:
<AssignMessage enabled="true" name="Assign-Message-1"> <Add> <Headers> <Header name="newvar">{myFaultVar}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
<AssignVariable>
trong chính sách RaiseFault sử dụng cú pháp tương tự như
Phần tử <AssignVariable>
trong assignMessage chính sách. Xin lưu ý rằng chức năng này
hiện không dùng được trong Apigee Edge dành cho Cloud riêng tư.
<FaultResponse><Add>/<Headers> phần tử
Thêm tiêu đề HTTP vào thông báo lỗi. Lưu ý rằng tiêu đề trống
<Add><Headers/></Add>
không thêm tiêu đề nào. Chiến dịch này
ví dụ này sẽ sao chép giá trị của biến luồng request.user.agent vào
.
<Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add>
Mặc định: |
Không áp dụng |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Chuỗi |
<FaultResponse><Copy> phần tử
Sao chép thông tin từ thư do
source
đến thông báo lỗi.
<Copy source="request"> <Headers/> <StatusCode/> <ReasonPhrase/> </Copy>
Mặc định: |
Không áp dụng |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Chuỗi |
Thuộc tính
<Copy source="response">
Thuộc tính | Mô tả | Sự hiện diện | Loại |
---|---|---|---|
nguồn |
Chỉ định đối tượng nguồn của bản sao.
|
Không bắt buộc | Chuỗi |
<FaultResponse><Copy>/<Headers> phần tử
Sao chép tiêu đề HTTP được chỉ định từ nguồn vào thông báo lỗi. Để sao chép tất cả tiêu đề,
chỉ định <Copy><Headers/></Copy>.
<Copy source='request'> <Headers> <Header name="headerName"/> </Headers> </Copy>
Nếu có nhiều tiêu đề trùng tên, hãy sử dụng cú pháp sau:
<Copy source='request'> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Copy>
Ví dụ này sao chép "h1", "h2" và giá trị thứ hai của "h3". Nếu "h3" chỉ có một thì giá trị đó sẽ không được sao chép.
Mặc định: |
Không áp dụng |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Chuỗi |
<FaultResponse><Copy>/<StatusCode> phần tử
Mã trạng thái HTTP cần sao chép từ đối tượng được chỉ định bởi thuộc tính nguồn vào lỗi .
<Copy source='response'> <StatusCode>404</StatusCode> </Copy>
Mặc định: |
false |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Chuỗi |
<FaultResponse><Copy>/<ReasonPhrase> phần tử
Nội dung mô tả lý do cần sao chép từ đối tượng do thuộc tính nguồn chỉ định vào lỗi .
<Copy source='response'> <ReasonPhrase>The resource requested was not found.</ReasonPhrase> </Copy>
Mặc định: |
false |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Chuỗi |
<FaultResponse><Remove>/<Headers> phần tử
Xoá tiêu đề HTTP được chỉ định khỏi thông báo lỗi. Để xoá tất cả tiêu đề, hãy chỉ định
<Remove><Headers/></Remove>
. Ví dụ này sẽ xoá
tiêu đề user-agent
của thư.
<Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove>
Nếu có nhiều tiêu đề trùng tên, hãy sử dụng cú pháp sau:
<Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove>
Ví dụ này sẽ xoá "h1", "h2" và giá trị thứ hai của "h3". Nếu "h3" chỉ có một thì giá trị đó sẽ không bị xoá.
Mặc định: |
Không áp dụng |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Chuỗi |
<FaultResponse><Set> phần tử
Đặt thông tin trong thông báo lỗi.
<Set> <Headers/> <Payload> </Payload> <StatusCode/> <ReasonPhrase/> </Set>
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 |
<FaultResponse>/<Set>/<Headers> phần tử
Đặt hoặc ghi đè tiêu đề HTTP trong thông báo lỗi. Lưu ý rằng tiêu đề trống
<Set><Headers/></Set>
không đặt tiêu đề nào. Ví dụ này đặt
tiêu đề user-agent
đến biến thông báo được chỉ định bằng
Phần tử <AssignTo>
.
<Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set>
Mặc định: |
Không áp dụng |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Chuỗi |
<FaultResponse>/<Set>/<Payload> phần tử
Thiết lập trọng tải của thông báo lỗi.
<Set> <Payload contentType="text/plain">test1234</Payload> </Set>
Đặt tải trọng JSON:
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set>
Trong tải trọng JSON, bạn có thể chèn các biến bằng cách sử dụng variablePrefix
và
Thuộc tính variableSuffix
có các ký tự phân tách như được thể hiện trong các thuộc tính sau
ví dụ:
<Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set>
hoặc kể từ bản phát hành đám mây 16.08.17, bạn cũng có thể chèn dấu ngoặc nhọn để chèn các biến:
<Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set>
Đặt tải trọng hỗn hợp trong XML:
<Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </Payload> </Set>
Mặc định: |
|
Sự hiện diện: |
Không bắt buộc |
Loại: |
Chuỗi |
Thuộc tính
<Payload contentType="content_type" variablePrefix="char" variableSuffix="char">
Thuộc tính | Mô tả | Sự hiện diện | Loại |
---|---|---|---|
contentType |
Nếu bạn chỉ định contentType, giá trị của contentType sẽ được gán cho |
Không bắt buộc | Chuỗi |
variablePrefix | Nếu muốn, hãy chỉ định dấu phân cách phía trước trên biến luồng vì tải trọng JSON không thể sử dụng "{" mặc định . | Không bắt buộc | Char |
variableSuffix | (Không bắt buộc) Chỉ định dấu phân cách ở cuối trên một luồng vì tải trọng JSON không thể sử dụng giá trị mặc định "}" . | Không bắt buộc | Char |
<FaultResponse>/<Set>/<StatusCode> phần tử
Đặt mã trạng thái của phản hồi.
<Set source='request'> <StatusCode>404</StatusCode> </Set>
Mặc định: |
false |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Boolean |
<FaultResponse>/<Set>/<ReasonPhrase> phần tử
Đặt cụm từ cho lý do của phản hồi.
<Set source='request'> <ReasonPhrase>The resource requested was not found.</ReasonPhrase> </Set>
Mặc định: |
false |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Boolean |
<ShortFaultReason> phần tử
Chỉ định việc hiển thị một lý do lỗi ngắn trong phản hồi:
<ShortFaultReason>true|false</ShortFaultReason>
Theo mặc định, lỗi trong phản hồi của chính sách là:
"fault":{"faultstring":"Raising fault. Fault name : Raise-Fault-1","detail":{"errorcode":"errorCode"}}}
Để thông báo dễ đọc hơn, bạn có thể thiết lập phần tử <ShortFaultReason>
thành true để rút ngắn faultstring
thành chỉ tên chính sách:
"fault":{"faultstring":"Raise-Fault-1","detail":{"errorcode":"errorCode"}}}
Giá trị hợp lệ: true/false(mặc định).
Mặc định: |
false |
Sự hiện diện: |
Không bắt buộc |
Loại: |
Boolean |
Biến luồng
Các biến luồng hỗ trợ 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 HTTP tiêu đề, nội dung thư hoặc Ngữ cảnh luồng. Hiện có các biến Luồng được xác định trước sau đây sau khi thực thi chính sách RaiseFault. Để biết thêm thông tin về Biến luồng, hãy xem Tài liệu tham khảo về biến.
Biến | Loại | Quyền | Mô tả |
---|---|---|---|
fault.name | Chuỗi | Chỉ có thể đọc | Khi thực thi chính sách RaiseFault, biến này sẽ luôn được đặt thành chuỗi
RaiseFault . |
fault.type | Chuỗi | Chỉ có thể đọc | Trả về loại lỗi trong lỗi và nếu không có loại lỗi, kết quả trả về sẽ là một chuỗi trống. |
fault.category | Chuỗi | Chỉ có thể đọc | Trả về danh mục lỗi trong lỗi và nếu không có danh mục lỗi, kết quả trả về sẽ là một chuỗi trống. |
Ví dụ về cách sử dụng RaiseFault
Ví dụ sau đây sử dụng một Điều kiện để thực thi sự hiện diện của một
queryparam
có tên zipcode
trong yêu cầu đến. Nếu
rằng queryparam
không tồn tại, luồng sẽ báo lỗi thông qua RaiseFault:
<Flow name="flow-1"> <Request> <Step> <Name>RF-Error-MissingQueryParam</Name> <Condition>request.queryparam.zipcode = null</Condition> </Step> ... </Request> ... <Condition>(proxy.pathsuffix MatchesPath "/locations") and (request.verb = "GET")</Condition> </Flow>Dưới đây là minh hoạ các giá trị trong RaiseFault:
<RaiseFault name='RF-Error-MissingQueryParam'> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <FaultResponse> <Set> <Payload contentType='application/json'>{ "error" : { "code" : 400.02, "message" : "invalid request. Pass a zipcode queryparam." } } </Payload> <StatusCode>400</StatusCode> <ReasonPhrase>Bad Request</ReasonPhrase> </Set> </FaultResponse> </RaiseFault>
Tham chiếu 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 rất quan trọng nếu bạn đang 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ách và Xử lý lỗi.
Lỗi thời gian chạy
Những lỗi này có thể xảy ra khi chính sách này thực thi.
Mã lỗi | Trạng thái HTTP | Nguyên nhân |
---|---|---|
steps.raisefault.RaiseFault |
500 | Xem chuỗi lỗi. |
Lỗi triển khai
Không có.
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 bài viết 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 lỗi, như đã nêu trong Bảng Lỗi thời gian chạy ở trên. Tên lỗi là tên cuối cùng của mã lỗi. | fault.name = "RaiseFault" |
raisefault.policy_name.failed |
policy_name là tên do người dùng chỉ định của chính sách đã gây ra lỗi. | raisefault.RF-ThrowError.failed = true |
Ví dụ về phản hồi khi gặp lỗi
{ "fault":{ "detail":{ "errorcode":"steps.raisefault.RaiseFault" }, "faultstring":"Raising fault. Fault name: [name]" } }
Lược đồ
Mỗi loại chính sách được xác định bằng một giản đồ XML (.xsd
). Giản đồ chính sách để tham khảo
đều có trên GitHub.
Chủ đề có liên quan
Xem phần Xử lý lỗi