אתם קוראים את מאמרי העזרה של Apigee Edge.
כדאי לעיין במסמכי העזרה בנושא Apigee X. מידע

מידע על המדיניות OASValidation
מדיניות OASValidation (אימות מפרט OpenAPI) מאפשרת לכם לאמת בקשה נכנסת או הודעת תגובה מול מפרט OpenAPI 3.0 (JSON או YAML). איזה תוכן עובר אימות?
המדיניות OASValidation מציינת את השם של מפרט OpenAPI שבו יש להשתמש לצורך אימות כשהשלב שאליו מצורפת המדיניות מופעל.
מפרט OpenAPI מאוחסן כמשאב במיקום הסטנדרטי הבא בחבילת ה-API Proxy: apiproxy/resources/oas
.
למפרט OpenAPI צריך להיות התוסף .json
, .yml
או .yaml
.
מוסיפים מפרט OpenAPI כמשאב לחבילת proxy של API באמצעות ממשק המשתמש או API, כמו שמתואר במאמר ניהול משאבים.
איזה תוכן מאומת?
בטבלה הבאה מפורט סיכום של תוכן הודעת הבקשה שעובר אימות על ידי מדיניות OASValidation, לפי רכיב.
רכיבים | בקש אימות |
---|---|
Basepath | מאמת את נתיב הבסיס שהוגדר על ידי שרת ה-API הפרוקסי, ומתעלם מנתיב הבסיס שצוין במפרט OpenAPI. |
נתיב | האימות מוודא שנתיב הבקשה (ללא נתיב הבסיס) תואם לאחת מתבניות הנתיבים שמוגדרות במפרט OpenAPI. |
פועל | האימות מוודא שהפועל מוגדר לנתיב במפרט OpenAPI. |
גוף הודעת הבקשה |
הערה: המדיניות מאמתת את גוף הודעת הבקשה מול מפרט OpenAPI רק אם Content-Type מוגדר ל- |
פרמטרים |
|
בטבלה הבאה מופיע סיכום של תוכן הודעת התגובה שמאומת על ידי מדיניות OASValidation, לפי רכיב.
רכיבים | אימות תשובות |
---|---|
נתיב | האימות מוודא שנתיב הבקשה (ללא נתיב הבסיס) תואם לאחת מתבניות הנתיבים שמוגדרות במפרט OpenAPI. |
פועל | האימות מוודא שהפועל מוגדר לנתיב במפרט OpenAPI. |
גוף הודעת התשובה |
|
דוגמאות
בדוגמאות הבאות מוצגים כמה מהאופנים שבהם אפשר להשתמש במדיניות OASValidation כדי לאמת הודעות בהתאם למפרט OpenAPI 3.0.
בדוגמה הבאה, המדיניות myoaspolicy
מאמתת את גוף הודעת הבקשה מול הסכימה של גוף הודעת הבקשה של הפעולה, שמוגדרת במפרט של my-spec.json
OpenAPI.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.json</OASResource> <Options> <ValidateMessageBody>true</ValidateMessageBody> </Options> <Source>request</Source> </OASValidation>
אם גוף ההודעה לא תואם למפרט OpenAPI, מוחזרת שגיאה policies.oasvalidation.Failed
.
בדוגמה הבאה מוגדרת המדיניות כך שאם בבקשה מצוינים פרמטרים של כותרת, שאילתה או קובץ Cookie שלא מוגדרים במפרט OpenAPI, הבקשה תיכשל.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Header>false</Header> <Query>false</Query> <Cookie>false</Cookie> </AllowUnspecifiedParameters> </Options> </OASValidation>
רכיב <OASValidation>
ההגדרה הזו מגדירה את מדיניות האימות של מפרט OpenAPI.
ערך ברירת המחדל | מידע נוסף מופיע בכרטיסייה מדיניות ברירת מחדל שבהמשך. |
חובה? | חובה |
סוג | אובייקט מורכב |
רכיב אב | לא רלוונטי |
רכיבי צאצא |
<DisplayName> <OASResource> <Source> <Options> <Source> |
התחביר של רכיב <OASValidation>
הוא:
<OASValidation continueOnError="[true|false]" enabled="[true|false]" name="policy_name " > <!-- All OASValidation child elements are optional except OASResource --> <DisplayName>policy_display_name </DisplayName> <OASResource>validation_JSON_or_YAML </OASResource> <Options> <ValidateMessageBody>[true|false]</ValidateMessageBody> <AllowUnspecifiedParameters> <Header>[true|false]</Header> <Query>[true|false]</Query> <Cookie>[true|false]</Cookie> </AllowUnspecifiedParameters> </Options> <Source>message_to_validate </Source> </OASValidation>
בדוגמה הבאה מוצגות הגדרות ברירת המחדל כשמוסיפים מדיניות של אימות OAS לתהליך בממשק המשתמש של Apigee:
<OASValidation continueOnError="false" enabled="true" name="OpenAPI-Spec-Validation-1"> <DisplayName>OpenAPI Spec Validation-1</DisplayName> <Properties/> <Source>request</Source> <OASResource>oas://OpenAPI-Spec-Validation-1.yaml</OASResource> </OASValidation>
לרכיב הזה יש את המאפיינים הבאים, המשותפים לכל כללי המדיניות:
מאפיין | ברירת מחדל | חובה? | תיאור |
---|---|---|---|
name |
לא רלוונטי | נדרש |
השם הפנימי של המדיניות. הערך של המאפיין אפשר להשתמש ברכיב |
continueOnError |
false | אופציונלי | צריך להגדיר את הערך 'False' כדי להחזיר שגיאה כשהמדיניות נכשלת. זו התנהגות צפויה ברוב סוגי המדיניות. הערך של הפרמטר הוא TRUE כדי שביצוע הפעולות יתבצע גם אחרי שמדיניות תיכשל. |
enabled |
true | אופציונלי | כדי לאכוף את המדיניות צריך להגדיר את הערך True. מגדירים את המדיניות כ-"false" כדי "להשבית" את המדיניות. המדיניות הזו לא תיאכף גם אם היא תצורף לתהליך. |
async |
false | הוצא משימוש | המאפיין הזה הוצא משימוש. |
הפניה לרכיב צאצא
בקטע הזה מתוארים רכיבי הבן של <OASValidation>
.
<DisplayName>
אפשר להשתמש במאפיין הזה בנוסף למאפיין name
כדי לתת למדיניות שם אחר, שנשמע טבעי יותר, ולתייג אותה בכלי לעריכת מדיניות ב-UI של ניהול ה-Proxy.
הרכיב <DisplayName>
משותף לכל סוגי המדיניות.
ערך ברירת המחדל | לא רלוונטי |
חובה? | אופציונלי. אם לא מציינים את <DisplayName> , המערכת משתמשת בערך של מאפיין name של המדיניות. |
סוג | מחרוזת |
רכיב אב | <PolicyElement> |
רכיבי צאצא | ללא |
התחביר של רכיב <DisplayName>
הוא:
<PolicyElement> <DisplayName>policy_display_name </DisplayName> ... </PolicyElement>
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
לרכיב <DisplayName>
אין מאפיינים או רכיבי צאצא.
<OASResource>
מציינים את מפרט OpenAPI שרוצים לבצע אימות מולו. אפשר לאחסן את הקובץ הזה:
- בטווח של ה-proxy ל-API בקטע
/apiproxy/resources/oas
בחבילת ה-proxy ל-API - בקטע
Resources
בתצוגת הניווט של כלי העריכה של שרת ה-API הפרוקסי.
מידע נוסף זמין במאמר ניהול משאבים.
אפשר לציין את מפרט OpenAPI באמצעות תבנית הודעה, כמו {oas.resource.url}
.
במקרה כזה, הערך של משתנה הזרימה oas.resource.url
(בסוגריים מסולסלים) יוערך ויוחלף במחרוזת המטען הייעודי בזמן הריצה.
מידע נוסף זמין במאמר בנושא תבניות הודעות.
ערך ברירת המחדל | ללא |
חובה? | חובה |
סוג | מחרוזת |
רכיב אב |
<OASValidation>
|
רכיבי צאצא | ללא |
התחביר של רכיב <OASResource>
הוא:
<OASValidation name="policy_name "> <OASResource>oas://specname [.json|.yaml|.yml]</OASResource> ... </OASValidation>
בדוגמה הבאה יש הפניה למפרט my-spec.yaml
שמאוחסן ב-/apiproxy/resources/oas
בחבילת ה-API Proxy:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> </OASValidation>
לרכיב <OASResource>
אין מאפיינים או רכיבי צאצא.
<Options>
הגדרת אפשרויות למדיניות.
ערך ברירת המחדל | לא רלוונטי |
חובה? | אופציונלי |
סוג | סוג מורכב |
רכיב אב |
<OASValidation>
|
רכיבי צאצא |
<ValidateMessageBody> <AllowUnspecifiedParameters> |
התחביר של רכיב <Options>
הוא:
<OASValidation name="policy_name "> <OASResource>oas://specname [.json|.yaml|.yml]</OASResource> <Options> <ValidateMessageBody>[true|false]</ValidateMessageBody> <AllowUnspecifiedParameters> <Header>[true|false]</Header> <Query>[true|false]</Query> <Cookie>[true|false]</Cookie> </AllowUnspecifiedParameters> </Options> ... </OASValidation>
בדוגמה הבאה מוגדרות האפשרויות של המדיניות. בהמשך מפורטות כל האפשרויות.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <ValidateMessageBody>false</ValidateMessageBody> <AllowUnspecifiedParameters> <Header>false</Header> <Query>false</Query> <Cookie>false</Cookie> </AllowUnspecifiedParameters> </Options> </OASValidation>
<ValidateMessageBody>
ההגדרה קובעת אם המדיניות צריכה לאמת את גוף ההודעה מול סכימת גוף הבקשה של הפעולה במפרט OpenAPI. מגדירים את הערך ל-true כדי לאמת את התוכן של גוף ההודעה. מגדירים את הערך false כדי לוודא שגוף ההודעה קיים.
כדי לקבוע אם הביצוע של התהליך יימשך אחרי שגיאת אימות, מגדירים את מאפיין continueOnError
של רכיב <OASValidation>
לערך true.
ערך ברירת המחדל | false |
חובה? | אופציונלי |
סוג | בוליאני |
רכיב אב |
<Options>
|
רכיבי צאצא | ללא |
התחביר של רכיב <ValidateMessageBody>
הוא:
<OASValidation name="policy_name "> <OASResource>oas://specname [.json|.yaml|.yml]</OASResource> <Options> <ValidateMessageBody>[true|false]</ValidateMessageBody> </Options> ... </OASValidation>
בדוגמה הבאה מופעל אימות של תוכן גוף ההודעה:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <ValidateMessageBody>true</ValidateMessageBody> </Options> </OASValidation>
<AllowUnspecifiedParameters>
ההגדרה הזו קובעת את ההתנהגות של המדיניות אם יש פרמטרים של כותרת, שאילתה או קובץ Cookie בבקשה שלא מוגדרים במפרט OpenAPI.
ערך ברירת המחדל | לא רלוונטי |
חובה? | אופציונלי |
סוג | סוג מורכב |
רכיב אב |
<Options>
|
רכיבי צאצא |
<Header> <Query> <Cookie> |
התחביר של רכיב <AllowUnspecifiedParameters>
הוא:
<OASValidation name="policy_name "> <OASResource>oas://specname [.json|.yaml|.yml]</OASResource> <Options> <AllowUnspecifiedParameters> <Header>[true|false]</Header> <Query>[true|false]</Query> <Cookie>[true|false]</Cookie> </AllowUnspecifiedParameters> </Options> ... </OASValidation>
בדוגמה הבאה מוגדרת המדיניות כך שאם בבקשה מצוינים פרמטרים של כותרת, שאילתה או קובץ Cookie שלא מוגדרים במפרט OpenAPI, הבקשה תיכשל.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Header>false</Header> <Query>false</Query> <Cookie>false</Cookie> </AllowUnspecifiedParameters> </Options> </OASValidation>
<Header>
(ילד/ה של <AllowUnspecifiedParameters>
)
מגדירה את ההתנהגות של המדיניות אם יש פרמטרים של כותרת בבקשה שלא מוגדרים במפרט OpenAPI.
כדי לאפשר לציין בבקשה פרמטרים של כותרות שלא מוגדרים במפרט OpenAPI, צריך להגדיר את הפרמטר הזה לערך true. אחרת, מגדירים את הפרמטר הזה לערך false כדי לגרום לביצוע המדיניות להיכשל.
ערך ברירת המחדל | true |
חובה? | בוליאני |
סוג | סוג מורכב |
רכיב אב |
<AllowUnspecifiedParameters>
|
רכיבי צאצא | ללא |
התחביר של רכיב <Header>
הוא:
<OASValidation name="policy_name "> <OASResource>oas://specname [.json|.yaml|.yml]</OASResource> <Options> <AllowUnspecifiedParameters> <Header>[true|false]</Header> </AllowUnspecifiedParameters> </Options> ... </OASValidation>
בדוגמה הבאה מוגדרת המדיניות כך שאם בבקשה מצוין פרמטר של כותרת שלא מוגדר במפרט OpenAPI, הבקשה תיכשל.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Header>false</Header> </AllowUnspecifiedParameters> </Options> </OASValidation>
<Query>
(ילד/ה של <AllowUnspecifiedParameters>
)
הגדרת אופן הפעולה של המדיניות אם יש פרמטרים של שאילתה בבקשה שלא מוגדרים במפרט OpenAPI.
כדי לאפשר לציין בבקשה פרמטרים של שאילתה שלא מוגדרים במפרט OpenAPI, צריך להגדיר את הפרמטר הזה לערך true. אחרת, מגדירים את הפרמטר הזה לערך false כדי לגרום לביצוע המדיניות להיכשל.
ערך ברירת המחדל | true |
חובה? | בוליאני |
סוג | סוג מורכב |
רכיב אב |
<AllowUnspecifiedParameters>
|
רכיבי צאצא | ללא |
התחביר של רכיב <Query>
הוא:
<OASValidation name="policy_name "> <OASResource>oas://specname [.json|.yaml|.yml]</OASResource> <Options> <AllowUnspecifiedParameters> <Query>[true|false]</Query> </AllowUnspecifiedParameters> </Options> ... </OASValidation>
בדוגמה הבאה מוגדרת המדיניות כך שאם בבקשה מצוין פרמטר שאילתה שלא מוגדר במפרט OpenAPI, הבקשה תיכשל.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Query>false</Query> </AllowUnspecifiedParameters> </Options> </OASValidation>
ההגדרה הזו קובעת את ההתנהגות של המדיניות אם יש פרמטרים של קובצי Cookie בבקשה שלא מוגדרים במפרט OpenAPI.
כדי לאפשר לציין בבקשה פרמטרים של קובצי Cookie שלא מוגדרים במפרט OpenAPI, מגדירים את הפרמטר הזה לערך true. אחרת, מגדירים את הפרמטר הזה לערך false כדי לגרום לביצוע המדיניות להיכשל.
ערך ברירת המחדל | true |
חובה? | בוליאני |
סוג | סוג מורכב |
רכיב אב |
<AllowUnspecifiedParameters>
|
רכיבי צאצא | ללא |
התחביר של רכיב <Cookie>
הוא:
<OASValidation name="policy_name "> <OASResource>oas://specname [.json|.yaml|.yml]</OASResource> <Options> <AllowUnspecifiedParameters> <Query>[true|false]</Query> </AllowUnspecifiedParameters> </Options> ... </OASValidation>
בדוגמה הבאה מוגדרת המדיניות כך שאם בבקשה מצוין פרמטר שאילתה שלא מוגדר במפרט OpenAPI, הבקשה תיכשל.
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Options> <AllowUnspecifiedParameters> <Cookie>false</Cookie> </AllowUnspecifiedParameters> </Options> </OASValidation>
<Source>
הודעת JSON שצריך להעריך אותה בהשוואה למטענים ייעודיים (payload) של JSON שמשמשים להתקפות. בדרך כלל הערך שמוגדר הוא request
, כי בדרך כלל צריך להעריך בקשות נכנסות מאפליקציות לקוח.
מגדירים את הערך response כדי להעריך הודעות תגובה.
הערך message גורם להערכה אוטומטית של הודעת הבקשה כשהמדיניות מצורפת לתהליך הבקשה, ושל הודעת התשובה כשהמדיניות מצורפת לתהליך התשובה.
ערך ברירת המחדל | בקשה |
חובה? | אופציונלי |
סוג | מחרוזת |
רכיב אב |
<Source>
|
רכיבי צאצא | ללא |
התחביר של רכיב <Source>
הוא:
<OASValidation name="policy_name "> <OASResource>oas://specname [.json|.yaml|.yml]</OASResource> <Source>[message|request|response]</Source> ... </OASValidation>
בדוגמה הבאה, הודעת הבקשה מוערכת באופן אוטומטי כשהמדיניות מצורפת לזרימת הבקשה, והודעת התגובה מוערכת כשהמדיניות מצורפת לזרימת התגובה:
<OASValidation name="myoaspolicy"> <OASResource>oas://my-spec.yaml</OASResource> <Source>message</Source> </OASValidation>
לרכיב <Source>
אין מאפיינים או רכיבי צאצא.
סכימות
כל סוג מדיניות מוגדר על ידי סכימת XML (.xsd
). סכימות מדיניות זמינות ב-GitHub.
קודי שגיאה
בקטע הזה מתוארים קודי התקלות והודעות השגיאה שמוחזרים, ומשתני השגיאה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת אם אתם מפתחים כללים לתיקון תקלות. מידע נוסף זמין במאמר מה צריך לדעת על שגיאות מדיניות ועל טיפול בפגמים.
שגיאות בזמן ריצה
השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.
קוד שגיאה | סטטוס HTTP | סיבה | |
---|---|---|---|
steps.oasvalidation.Failed |
500 | לא ניתן לאמת את גוף הודעת הבקשה מול מפרט OpenAPI שסופק. | |
steps.oasvalidation.SourceMessageNotAvailable |
500 |
המשתנה שצוין ברכיב |
|
steps.oasvalidation.NotMessageVariable |
500 |
רכיב |
build |
שגיאות בפריסה
השגיאות האלה יכולות להתרחש כשפורסים שרת proxy שכולל את המדיניות הזו.
שם השגיאה | סיבה | |
---|---|---|
ResourceDoesNotExist |
מפרט OpenAPI שיש אליו הפניה ברכיב <OASResource> לא קיים.
|
|
ResourceCompileFailed |
מפרט OpenAPI שכלול בפריסה מכיל שגיאות שמונעות את ההידור שלו. בדרך כלל הדבר מצביע על כך שהמפרט לא מעוצב כראוי במפרט OpenAPI 3.0. | |
BadResourceURL |
לא ניתן לעבד את מפרט OpenAPI שיש אליו הפניה ברכיב <OASResource> . מצב כזה יכול לקרות אם הקובץ אינו קובץ JSON או YAML, או אם
כתובת ה-URL של הקובץ לא צוינה.
|
משתני שבר
המשתנים האלה מוגדרים כשהמדיניות הזו גורמת לשגיאה בזמן הריצה. אפשר לקרוא מידע נוסף במאמר מה צריך לדעת על שגיאות מדיניות.
משתנים | מיקום | דוגמה |
---|---|---|
fault.name="fault_name" |
fault_name הוא שם התקלה, כפי שמפורט בטבלה שגיאות זמן ריצה שלמעלה. שם הטעות הוא החלק האחרון בקוד השגיאה. | fault.name Matches "ResourceDoesNotExist" |
oasvalidation.policy_name.failed |
policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לשגיאה. | oasvalidation.myoaspolicy.failed = true |
תכונות נתמכות של מפרטי OpenAPI
מדיניות OASValidation תומכת בתכונות של מפרט OpenAPI שמסוכמות בטבלה הבאה, לפי קטגוריה. מופיעה גם רשימה של התכונות שלא נתמכות.
קטגוריה | נתמך | לא נתמך |
---|---|---|
פורמטים של סוגי נתונים | boolean date date-time double float int32/int64 ipv4/ipv6 md5 sha1/sha256/sha512 string uri uri-template uuid |
binary byte password |
אובייקט דיסקרימינטור | מיפוי propertyName |
לא רלוונטי |
אובייקט מסוג מדיה | סכימה | קידוד דוגמה דוגמאות |
אובייקט פעולות | parameters requestBody responses security (partial support) |
callbacks deprecated servers |
אובייקט הפרמטרים | allowEmptyValue in ( query , header , path )required responses schema style ( deepObject , form , formmatrix , label , pipeDelimited , simple , spaceDelimited )הערה: deepObject תומך רק בפרמטרים של מחרוזות. הוא לא תומך במערכים ובאובייקטים מקוננים.
|
allowReserved deprecated example examples content |
אובייקט Paths | delete get head options parameters patch post put trace variables |
שרתים |
אובייקט גוף הבקשה | application/json application/hal+json application/x-www-form-urlencoded ( encoding object not supported)content required |
application/xml multipart/form-data text/plain text/xml |
אובייקט תגובה | application/json application/hal+json application/x-www-form-urlencoded ( encoding object not supported)content headers |
application/xml links text/plain text/xml |
אובייקט התשובות | ברירת מחדל קוד מצב HTTP |
לא רלוונטי |
אובייקט סכימה | $ref additionalProperties (רק בווריאציה של דגל בוליאני) allOf (מתעלמים אם additionalProperties הוא false )anyOf enum exclusiveMaximum/exclusiveMinimum format items maximum/minimum maxItems/minItems maxLength/minLength maxProperties/minProperties multipleOf not nullable oneOf pattern properties required title type uniqueItems |
deprecated example readOnly writeOnly xml |
אובייקט של תוכנית אבטחה | ב- (header , query ) (מתעלמים אם type הוא http )שם סוג ( apiKey , http )
|
bearerFormat flows openIdConnectUrl scheme |
אובייקט שרת | כתובת URL משתנים |
הגדרות של כמה שרתים |