הודעה שמייצגת גוף HTTP שרירותי. צריך להשתמש בו רק עבור פורמטים של מטען ייעודי (payload) שלא ניתן לייצג כ-JSON, כמו קובץ בינארי גולמי או דף HTML.
אפשר להשתמש בהודעה הזו גם בשיטות של API עם סטרימינג וגם בשיטות של API ללא סטרימינג, בבקשה וגם בתשובה.
אפשר להשתמש בו כשדה בקשה ברמה העליונה, וזה נוח אם רוצים לחלץ פרמטרים מתבנית של כתובת URL או HTTP לשדות הבקשה, וגם רוצים גישה לגוף ה-HTTP הגולמי.
דוגמה:
message GetResourceRequest {
// A unique request id.
string requestId = 1;
// The raw HTTP body is bound to this field.
google.api.HttpBody http_body = 2;
}
service ResourceService {
rpc GetResource(GetResourceRequest)
returns (google.api.HttpBody);
rpc UpdateResource(google.api.HttpBody)
returns (google.protobuf.Empty);
}
דוגמה לשימוש בשיטות סטרימינג:
service CaldavService {
rpc GetCalendar(stream google.api.HttpBody)
returns (stream google.api.HttpBody);
rpc UpdateCalendar(stream google.api.HttpBody)
returns (stream google.api.HttpBody);
}
השימוש בסוג הזה משנה רק את האופן שבו מטפלים בגופי הבקשה והתגובה, וכל שאר התכונות ימשיכו לפעול ללא שינוי.
| ייצוג ב-JSON |
|---|
{ "contentType": string, "data": string, "extensions": [ { "@type": string, field1: ..., ... } ] } |
| שדות | |
|---|---|
contentType |
ערך הכותרת Content-Type של HTTP שמציין את סוג התוכן של הגוף. |
data |
הגוף של בקשת ה-HTTP או התשובה כבינארי גולמי. מחרוזת בקידוד Base64. |
extensions[] |
מטא-נתונים של תשובה ספציפית לאפליקציה. צריך להגדיר את הערך הזה בתשובה הראשונה ל-API של סטרימינג. אובייקט שמכיל שדות מכל סוג שהוא. שדה נוסף |