אתם קוראים את מסמכי התיעוד של Apigee Edge.
למעבר אל
מסמכי התיעוד של Apigee X info
מידע על המדיניות OASValidation
המדיניות OASValidation (אימות מפרט OpenAPI) מאפשרת לאמת הודעת בקשה או הודעת תגובה נכנסת מול מפרט OpenAPI 3.0 (JSON או YAML). איזה תוכן מאומת?
מדיניות OASValidation מציינת את השם של מפרט OpenAPI שבו צריך להשתמש לאימות כשמבוצע השלב שאליו המדיניות מצורפת.
מפרט OpenAPI מאוחסן כמשאב במיקום הרגיל הבא בתוך חבילת ה-proxy ל-API: apiproxy/resources/oas.
למפרט OpenAPI חייבת להיות סיומת .json, .yml או .yaml.
מוסיפים מפרט OpenAPI כמשאב לחבילת proxy ל-API באמצעות ממשק המשתמש או ה-API, כפי שמתואר במאמר ניהול משאבים.
איזה תוכן מאומת?
בטבלה הבאה מפורט תוכן הודעת הבקשה שעובר אימות על ידי מדיניות OASValidation, לפי רכיב.
| רכיבים | בקש אימות |
|---|---|
| נתיב בסיס | מאמת את נתיב הבסיס שמוגדר על ידי ה-proxy ל-API, ומתעלם מנתיב הבסיס שצוין במפרט OpenAPI. |
| נתיב | מאמת שנתיב הבקשה (ללא נתיב הבסיס) תואם לאחת מתבניות הנתיב שמוגדרות במפרט OpenAPI. |
| פועל | בדיקה שהפועל מוגדר לנתיב במפרט OpenAPI. |
| גוף ההודעה של הבקשה |
הערה: המדיניות מאמתת את גוף ההודעה של הבקשה מול מפרט OpenAPI רק אם Content-Type מוגדר לערך |
| פרמטרים |
|
בטבלה הבאה מפורט תוכן הודעת התגובה שמאומת על ידי מדיניות OASValidation, לפי רכיב.
| רכיבים | אימות תשובות |
|---|---|
| נתיב | מאמת שנתיב הבקשה (ללא נתיב הבסיס) תואם לאחת מתבניות הנתיב שמוגדרות במפרט OpenAPI. |
| פועל | בדיקה שהפועל מוגדר לנתיב במפרט OpenAPI. |
| גוף הודעת התגובה |
|
דוגמאות
הדוגמאות הבאות מראות כמה מהדרכים שבהן אפשר להשתמש בכללי המדיניות של OASValidation כדי לאמת הודעות מול מפרט OpenAPI 3.0.
הודעת בקשה לאימות
בדוגמה הבאה, המדיניות myoaspolicy מאמתת את גוף הודעת הבקשה מול הסכימה של גוף הודעת הבקשה של הפעולה, שמוגדרת במפרט OpenAPI של my-spec.json.
<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 Specification Validation.
| ערך ברירת המחדל | אפשר לעיין בכרטיסייה מדיניות ברירת המחדל שבהמשך |
| חובה? | חובה |
| סוג | אובייקט מורכב |
| רכיב הורה | לא רלוונטי |
| רכיבי צאצא |
<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 כדי לתייג את המדיניות בעורך ה-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בתצוגת הניווט של עורך ה-proxy ל-API.
מידע נוסף זמין במאמר ניהול משאבים.
אפשר לציין את מפרט OpenAPI באמצעות תבנית הודעה, כמו {oas.resource.url}.
במקרה כזה, הערך של משתנה הזרימה oas.resource.url (בסוגריים מסולסלים) יחושב ויוחלף במחרוזת המטען הייעודי (payload) בזמן הריצה.
מידע נוסף זמין במאמר תבניות של הודעות.
| ערך ברירת המחדל | ללא |
| חובה? | חובה |
| סוג | מחרוזת |
| רכיב הורה |
<OASValidation>
|
| רכיבי צאצא | ללא |
תחביר
הרכיב <OASResource> משתמש בתחביר הבא:
<OASValidation name="policy_name"> <OASResource>oas://specname[.json|.yaml|.yml]</OASResource> ... </OASValidation>
דוגמה
בדוגמה הבאה יש הפניה למפרט my-spec.yaml שמאוחסן ב-/apiproxy/resources/oas בחבילת ה-proxy ל-API:
<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 |
| אובייקט דיסקרימינטור | mapping propertyName |
לא רלוונטי |
| אובייקט מסוג מדיה | סכימה | encoding example examples |
| אובייקט Operations | parameters requestBody responses security (תמיכה חלקית) |
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 |
| אובייקט נתיבים | delete get head options parameters patch post put trace variables |
שרתים |
| אובייקט גוף הבקשה | application/json application/hal+json application/x-www-form-urlencoded (אובייקט encoding לא נתמך)content required |
application/xml multipart/form-data text/plain text/xml |
| אובייקט תגובה | application/json application/hal+json application/x-www-form-urlencoded (אובייקט encoding לא נתמך)content headers |
application/xml links text/plain text/xml |
| אובייקט Responses | default קוד סטטוס של 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 |
| אובייקט של סכימת אבטחה | in (header, query) (המערכת מתעלמת מהפרמטר הזה אם הערך של type הוא http)name type ( apiKey, http)
|
bearerFormat flows openIdConnectUrl scheme |
| אובייקט שרת | משתני כתובת ה-URL |
הגדרות של כמה שרתים |