Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Chính sách SOAPMessageValidation (Xác thực SOAPMessageValidation) thực hiện những việc sau:
- Xác thực mọi thông báo XML dựa trên giản đồ XSD
- Xác thực thông báo SOAP theo định nghĩa WSDL
- Xác định định dạng đúng của thông báo JSON và XML
Mặc dù tên của chính sách này trong giao diện người dùng là "Xác thực thông báo SOAP", nhưng chính sách này xác thực thêm so với chỉ thông báo SOAP. Chính sách này được gọi là "Chính sách xác thực thư".
<MessageValidation>
phần tử
Xác định Chính sách xác thực thư.
Giá trị mặc định | Xem tab Chính sách mặc định bên dưới |
Bắt buộc? | Không bắt buộc |
Loại | Đối tượng phức tạp |
Phần tử mẹ | không áp dụng |
Phần tử con |
<DisplayName> <Element> <ResourceURL> <SOAPMessage> <Source> |
Cú pháp
Phần tử <MessageValidation>
sử dụng cú pháp sau:
<MessageValidation continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All MessageValidation child elements are optional --> <DisplayName>policy_display_name</DisplayName> <Element namespace="element_namespace">element_to_validate</Element> <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> <Source>message_to_validate</Source> <ResourceURL>validation_WSDL_or_XSD</ResourceURL> </MessageValidation>
Chính sách mặc định
Ví dụ sau đây cho thấy các chế độ cài đặt mặc định khi bạn thêm chính sách Xác thực thư vào quy trình của bạn trong giao diện người dùng Edge:
<MessageValidation continueOnError="false" enabled="true" name="SOAP-Message-Validation-1"> <DisplayName>SOAP Message Validation-1</DisplayName> <Properties/> <Element namespace="http://sample.com">sampleObject</Element> <SOAPMessage/> <Source>request</Source> <ResourceURL>wsdl://SOAP-Message-Validation-1.wsdl</ResourceURL> </MessageValidation>
Phần tử này có các thuộc tính chung cho tất cả các chính sách:
Thuộc tính | Mặc định | Bắt buộc? | Nội dung mô tả |
---|---|---|---|
name |
Không áp dụng | Bắt buộc |
Tên nội bộ của chính sách. Giá trị của thuộc tính Nếu muốn, hãy sử dụng phần tử |
continueOnError |
sai | Không bắt buộc | Đặt thành "false" để trả về lỗi khi một chính sách không thành công. Đây là hành vi dự kiến đối với hầu hết các chính sách. Đặt thành "true" để tiếp tục thực thi luồng ngay cả sau khi chính sách không hoạt động. |
enabled |
true | Không bắt buộc | Đặt thành "true" để thực thi chính sách này. Đặt thành "false" để "tắt" chính sách này. Chính sách sẽ không được thực thi ngay cả khi vẫn được liên kết với một luồng. |
async |
sai | Không được dùng nữa | Thuộc tính này không còn được dùng nữa. |
Ví dụ
Các ví dụ sau đây minh hoạ một số cách bạn có thể sử dụng tính năng Xác thực tin nhắn chính sách của Google:
1: Xác thực XSD
Bạn có thể sử dụng Chính sách xác thực tin nhắn để xác thực tải trọng của yêu cầu thông báo XML dựa trên giản đồ XSD.
- Tạo tệp tài nguyên XSD mới. Cho
ví dụ: "note-schema.xsd":
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
- Thêm chính sách Xác thực thông báo SOAP vào quy trình trước của điểm cuối proxy:
- Chỉ định vị trí của tệp tài nguyên XSD bằng
<ResourceURL>
. Ví dụ:... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
- Xoá các phần tử
<SOAPMessage>
và<Element>
khỏi định nghĩa chính sách.
Chính sách của bạn có định nghĩa như sau:
<MessageValidation continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My XML Validator</DisplayName> <Properties/> <Source>request</Source> <ResourceURL>xsd://note-schema.xsd</ResourceURL> </MessageValidation>
- Chỉ định vị trí của tệp tài nguyên XSD bằng
- Gửi yêu cầu
POST
đến proxy API của bạn dưới dạng thông báo XML tải trọng, như trong ví dụ sau:curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<note> <to>Fred Rogers</to> <from>Nick Danger</from> <heading>Greetings from my neighborhood</heading> <body>Just writing to say hello.</body> </note>'
Xin lưu ý rằng tiêu đề
Content-type
được đặt thành "application/xml".Bạn cũng có thể tạo một tệp dữ liệu cho tải trọng và tham chiếu tệp đó bằng một lệnh tương tự như sau:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/note-payload.xml'
Bạn sẽ nhận được phản hồi HTTP 200
. Tuỳ thuộc vào điểm cuối mục tiêu,
bạn có thể nhận được thêm thông tin chi tiết về yêu cầu. Ví dụ: nếu bạn sử dụng
http://httpbin.org/post
làm điểm cuối mục tiêu và chỉ định -v
(chi tiết) thì phản hồi sẽ tương tự như sau:
< HTTP/1.1 200 OK < Date: Wed, 16 May 2018 21:24:54 GMT < Content-Type: application/xml < Content-Length: 431 < Connection: keep-alive < Server: gunicorn/19.8.1 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < Via: 1.1 vegur { "args":{}, "data":"<note><to>fred</to><from>nick</from><heading>hello</heading> <body>Just writing to say hello.</body></note>", "files":{}, "form":{}, "headers": { "Accept":"*/*", "Connection":"close", "Content-Length":"106", "Content-Type":"application/xml", "Host":"httpbin.org", "User-Agent":"curl/7.58.0" }, "json":null, "origin":"10.1.1.1, 104.154.179.1", "url":"http://httpbin.org/post" }
Để xác minh rằng quá trình xác thực XSD đang hoạt động, hãy thử chèn một thẻ khác vào phần nội dung của yêu cầu của bạn. Ví dụ:
curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<note> <to>Fred Rogers</to> <from>Nick Danger</from> <heading>Greetings from my neighborhood</heading> <body>Just writing to say hello.</body> <badTag>Not good</badTag> </note>'
Bạn sẽ nhận được lỗi xác thực.
2: Xác thực SOAP
Bạn có thể sử dụng Chính sách xác thực tin nhắn để xác thực tải trọng của yêu cầu thông báo SOAP dựa trên WSDL.
- Tạo tệp tài nguyên WSDL mới. Ví dụ: "example-wsdl.wsdl":
- Thêm chính sách Xác thực thông báo SOAP vào quy trình trước của điểm cuối proxy:
- Đặt thuộc tính
version
của phần tử<SOAPMessage>
thành giá trị phiên bản của giao thức SOAP mà bạn muốn xác thực. Ví dụ: "1.1":... <SOAPMessage version="1.1"/> ...
- Đặt giá trị của phần tử
<Element>
thành phần tử bạn muốn xác thực:... <Element namespace="https://example.com/gateway">getID</Element> ...
<Element>
chỉ định phần tử con đầu tiên trong phần tử<Body>
trong phong bì của yêu cầu SOAP.Đặt thuộc tính
namespace
thành không gian tên cho phần tử con đó. - Chỉ định vị trí của tệp tài nguyên WSDL bằng
<ResourceURL>
. Ví dụ:... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
Chính sách của bạn có định nghĩa như sau:
<MessageValidation continueOnError="false" enabled="true" name="validateSOAPRequest"> <DisplayName>My SOAP Validator</DisplayName> <Properties/> <Source>request</Source> <SOAPMessage version="1.1"/> <Element namespace="https://example.com/gateway">getID</Element> <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> </MessageValidation>
- Đặt thuộc tính
- Gửi yêu cầu
POST
đến proxy API của bạn bằng phong bì SOAP dưới dạng tải trọng của thư, như trong ví dụ sau đây:curl -v -X POST -H 'Content-Type: application/xml' http://my-test.apigee.net/v1/xsd-mock -d '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prox="https://example.com/gateway" xmlns:typ="https://example.com/gateway/types"> <soapenv:Header/> <soapenv:Body> <prox:getID> <typ:MyType> <typ:ID>42</typ:ID> </typ:MyType> </prox:getID> </soapenv:Body> </soapenv:Envelope>'
Xin lưu ý rằng tiêu đề
Content-type
được đặt thành "application/xml".Bạn cũng có thể tạo một tệp dữ liệu cho tải trọng và tham chiếu tệp đó bằng một lệnh tương tự như sau:
curl -v -X POST -H 'Content-type: application/xml' http://my-test.apigee.net/v1/xsd-mock --data '@../examples/soap-payload.xml'
Bạn sẽ nhận được phản hồi HTTP 200
. Tuỳ thuộc vào điểm cuối mục tiêu,
bạn có thể nhận được thêm thông tin chi tiết về yêu cầu. Ví dụ: nếu bạn sử dụng
http://httpbin.org/post
làm điểm cuối mục tiêu, phản hồi phải tương tự
thành các chỉ số sau:
< HTTP/1.1 200 OK < Date: Wed, 16 May 2018 21:24:54 GMT < Content-Type: application/xml < Content-Length: 431 < Connection: keep-alive < Server: gunicorn/19.8.1 < Access-Control-Allow-Origin: * < Access-Control-Allow-Credentials: true < Via: 1.1 vegur { "args":{}, "data":"<note><to>fred</to><from>nick</from><heading>hello</heading> <body>Just writing to say hello.</body></note>", "files":{}, "form":{}, "headers": { "Accept":"*/*", "Connection":"close", "Content-Length":"106", "Content-Type":"application/xml", "Host":"httpbin.org", "User-Agent":"curl/7.58.0" }, "json":null, "origin":"10.1.1.1, 104.154.179.1", "url":"http://httpbin.org/post" }
3: XML/JSON có định dạng tốt
Bạn có thể sử dụng Chính sách xác thực thư để xác nhận rằng tải trọng thư JSON hoặc XML được định dạng đúng (không giống như xác thực). Chính sách này đảm bảo rằng cấu trúc và nội dung đáp ứng các tiêu chuẩn được chấp nhận, bao gồm:
- Có một phần tử gốc duy nhất
- Không có ký tự không hợp lệ trong nội dung
- Các đối tượng và thẻ được lồng đúng cách
- Thẻ bắt đầu và thẻ kết thúc trùng khớp với nhau
Cách kiểm tra xem có tải trọng XML hoặc JSON được tạo đúng cách hay không:
- Thêm chính sách Xác thực thông báo SOAP vào quy trình trước của điểm cuối proxy.
- Xoá
<ResourceURL>
,<SOAPMessage>
, và<Element>
trong định nghĩa về chính sách.Chính sách của bạn có định nghĩa như sau:
<MessageValidation async="false" continueOnError="false" enabled="true" name="validateXMLRequest"> <DisplayName>My JSON Checker</DisplayName> <Properties/> <Source>request</Source> </MessageValidation>
- Gửi một yêu cầu
POST
đến proxy API của bạn, như trong ví dụ sau:curl -v -X POST -H 'Content-Type: application/json' http://my-test.apigee.net/v1/xsd-mock -d '{ "note": { "to": "Fred Rogers", "from": "Nick Danger", "header": "Greetings from my neighborhood", "body": "Just writing to say hello." } }'
Xin lưu ý rằng tiêu đề
Content-type
được đặt thành "application/json".Để kiểm tra tệp XML xem có đúng định dạng hay không, hãy sử dụng XML làm tải trọng thư và đặt
Content-type
thành "application/xml".
Bạn sẽ nhận được phản hồi HTTP 200
. Khi bạn gửi một gói dữ liệu thư
không chứa XML hoặc JSON có định dạng tốt, bạn sẽ nhận được một lỗi
steps.messagevalidation.Failed
lỗi.
Tham chiếu phần tử con
Phần này mô tả các phần tử con của <MessageValidation>
.
<DisplayName>
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ý với một cái tên khác, nghe tự nhiên hơn.
Phần tử <DisplayName>
áp dụng chung cho mọi chính sách.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc. Nếu bạn bỏ qua <DisplayName> , giá trị của
Thuộc tính name của chính sách được dùng |
Loại | Chuỗi |
Phần tử mẹ | <PolicyElement> |
Phần tử con | Không có |
Phần tử <DisplayName>
sử dụng cú pháp sau:
Cú pháp
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Ví dụ:
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
Phần tử <DisplayName>
không có thuộc tính hoặc phần tử con.
<Element>
Chỉ định phần tử trong thông báo để xác thực. Đây là trẻ đầu tiên dưới
Phần tử <Body>
trong phong bì của yêu cầu SOAP.
Giá trị mặc định | sampleObject |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<MessageValidation>
|
Phần tử con | Không có |
Phần tử <Element>
sử dụng cú pháp sau:
Cú pháp
... <Element namespace="element_namespace">element_to_validate</Element> ...
Ví dụ 1
Ví dụ sau đây xác định một phần tử duy nhất cần được xác thực:
... <Element namespace="https://example.com/gateway">getID</Element> ...
Ví dụ 2
Bạn có thể chỉ định nhiều phần tử để xác thực bằng cách thêm nhiều <Element>
phần tử:
... <Element namespace="https://example.com/gateway">getID</Element> <Element namespace="https://example.com/gateway">getDetails</Element> ...
Phần tử <Element>
có các thuộc tính như sau:
Thuộc tính | Mặc định | Bắt buộc? | Mô tả |
---|---|---|---|
namespace |
"http://sample.com" | Không bắt buộc | Xác định không gian tên của phần tử cần được xác thực. |
<ResourceURL>
Xác định giản đồ XSD hoặc định nghĩa WSDL dùng để xác thực thông báo nguồn.
Giá trị mặc định | wsdl://display_name.wsdl |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<MessageValidation>
|
Phần tử con | Không có |
Phần tử <ResourceURL>
sử dụng cú pháp sau:
Cú pháp
... <ResourceURL>[wsdl|xsd]://validation_WSDL_or_XSD</ResourceURL> ...
Ví dụ
Đối với tệp XML:
... <ResourceURL>xsd://note-schema.xsd</ResourceURL> ...
Đối với WSDL:
... <ResourceURL>wsdl://example-wsdl.wsdl</ResourceURL> ...
Giá trị của <ResourceURL>
phải trỏ đến một tài nguyên
trong proxy API của bạn. URL này không được tham chiếu đến các tài nguyên bên ngoài qua HTTP hoặc HTTPS.
Nếu bạn không chỉ định giá trị cho <ResourceURL>
, thì hệ thống sẽ kiểm tra thông báo để tìm JSON có định dạng hợp lệ
hoặc XML nếu tiêu đề Content-type
là "application/json" hoặc "application/xml",
.
Phần tử <ResourceURL>
không có các phần tử hoặc thuộc tính con.
Sử dụng XSD để xác thực
Nếu tải trọng XML mà bạn xác thực bằng chính sách Xác thực tin nhắn có tham chiếu đến
một giản đồ khác, bạn phải thêm tiền tố xsd
vào tệp XSD đi kèm trong
Thuộc tính schemaLocation
.
Giản đồ mẫu sau bao gồm nhiều XSD:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:include schemaLocation="xsd://note-schema.xsd"/> <xs:include schemaLocation="xsd://letter-schema.xsd"/> <xs:include schemaLocation="xsd://user-schema.xsd"/> </xs:schema>
Sử dụng WSDL để xác thực
Mỗi WSDL phải xác định ít nhất một giản đồ. Nếu mã này không tham chiếu đến ít nhất một giản đồ, Chính sách Xác thực thư không thành công.
Chiều sâu nhập tối đa cho một giản đồ là 10. Nếu bạn vượt quá số lần nhập lồng nhau đó, Chính sách Xác thực thư không thành công.
<SOAPMessage>
Xác định phiên bản SOAP mà chính sách Xác thực tin nhắn xác thực.
Giá trị mặc định | không áp dụng |
Bắt buộc? | Không bắt buộc |
Loại | không áp dụng |
Phần tử mẹ |
<MessageValidation>
|
Phần tử con | Không có |
Phần tử <SOAPMessage>
sử dụng cú pháp sau:
Cú pháp
... <SOAPMessage version="[ 1.1 | 1.2 | 1.1/1.2 ]"/> ...
Ví dụ:
... <SOAPMessage version="1.1"/> ...
Phần tử <SOAPMessage>
có các thuộc tính như sau:
Thuộc tính | Mặc định | Bắt buộc? | Mô tả |
---|---|---|---|
version |
Không có | Không bắt buộc | Phiên bản SOAP mà chính sách này sử dụng để xác thực thông báo SOAP.
Các giá trị hợp lệ là:
|
Để biết thêm thông tin, hãy xem Từ SOAP/1.1 thành SOAP Phiên bản 1.2 trong 9 điểm.
<Source>
Xác định thông báo nguồn cần xác thực. Giá trị của phần tử này là tên của mà bạn muốn xác thực.
Nếu bạn không đặt <Source>
, chính sách này sẽ được đặt mặc định thành "thông báo", tức là thông báo hoàn chỉnh
thông báo yêu cầu (trong quy trình yêu cầu) hoặc thông báo phản hồi (trong quy trình phản hồi), bao gồm bất kỳ thông báo nào
tải trọng. Bạn cũng có thể đặt thành "yêu cầu" một cách rõ ràng hoặc "phản hồi" đề cập đến yêu cầu hoặc
của bạn.
Giá trị mặc định | request |
Bắt buộc? | Không bắt buộc |
Loại | Chuỗi |
Phần tử mẹ |
<MessageValidation>
|
Phần tử con | Không có |
Phần tử <Source>
sử dụng cú pháp sau:
Cú pháp
... <Source>message_to_validate</Source> ...
Ví dụ:
... <Source>request</Source> ...
Ngoài "tin nhắn", "yêu cầu" và "phản hồi", bạn có thể đặt giá trị của
<Source>
vào tên của bất kỳ thông báo nào trong luồng của bạn. Tuy nhiên, nếu làm như vậy, bạn phải tạo một
thông báo tuỳ chỉnh có tên đó trong quy trình của bạn trước khi chính sách này thực thi. Nếu không, bạn sẽ nhận được
lỗi.
Nếu giá trị của <Source>
không thể phân giải được trong luồng tin nhắn hoặc phân giải thành một tin nhắn không phải là tin nhắn
thì một trong các trường hợp sau sẽ xảy ra:
- Nếu có giá trị rỗng: Edge sẽ gửi ra
steps.messagevalidation.SourceMessageNotAvailable
lỗi. - Nếu loại thông báo không phải là tin nhắn: Edge sẽ gửi một thông báo
steps.messagevalidation.NonMessageVariable
lỗi.
Phần tử <Source>
không có thuộc tính hoặc phần tử con.
Mã lỗi
Các lỗi do chính sách của Edge trả về sẽ có một định dạng nhất quán như mô tả trong phần Tài liệu tham khảo về mã 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 đóng vai trò quan trọng trong việc 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 thực thi chính sách.
Mã lỗi | Trạng thái HTTP | Nguyên nhân | Khắc phục |
---|---|---|---|
steps.messagevalidation.SourceMessageNotAvailable |
500 |
Lỗi này xảy ra nếu một biến được chỉ định trong phần tử
|
build |
steps.messagevalidation.NonMessageVariable |
500 |
Lỗi này xảy ra nếu phần tử Các biến loại thông báo đại diện cho toàn bộ yêu cầu và phản hồi HTTP. Các biến luồng Edge
tích hợp sẵn |
build |
steps.messagevalidation.Failed |
500 | Lỗi này xảy ra nếu chính sách SOAPMessageValidation không xác thực được tải trọng thông báo đầu vào theo giản đồ XSD hoặc định nghĩa WSDL. Điều này cũng sẽ xảy ra nếu thông báo tải trọng có định dạng JSON hoặc XML không đúng định dạng. | build |
Lỗi triển khai
Những lỗi này có thể xảy ra khi bạn triển khai proxy chứa chính sách này.
Tên lỗi | Nguyên nhân | Khắc phục |
---|---|---|
InvalidResourceType |
Phần tử <ResourceURL> trong chính sách SOAPMessageValidation được đặt thành một loại tài nguyên không được chính sách này hỗ trợ.
|
build |
ResourceCompileFailed |
Tập lệnh tài nguyên được tham chiếu trong phần tử <ResourceURL> của chính sách SOAPMessageValidation có chứa một lỗi ngăn cản quá trình biên dịch.
|
build |
RootElementNameUnspecified |
Phần tử <Element> trong chính sách SOAPMessageValidation không chứa tên của phần tử gốc. |
build |
InvalidRootElementName |
Phần tử <Element> trong chính sách SOAPMessageValidation chứa tên thành phần gốc không tuân thủ các quy tắc XML về cách đặt tên thành phần hợp lệ. |
build |
Giản đồ
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.