HttpBody

הודעה שמייצגת גוף 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

string

ערך הכותרת Content-Type של HTTP שמציין את סוג התוכן של הגוף.

data

string (bytes format)

הגוף של בקשת ה-HTTP או התשובה כבינארי גולמי.

מחרוזת בקידוד Base64.

extensions[]

object

מטא-נתונים של תשובה ספציפית לאפליקציה. צריך להגדיר את הערך הזה בתשובה הראשונה ל-API של סטרימינג.

אובייקט שמכיל שדות מכל סוג שהוא. שדה נוסף "@type" מכיל URI שמזהה את הסוג. לדוגמה: { "id": 1234, "@type": "types.example.com/standard/id" }.