Content types
Default behavior
Content type is assumed to be application/json
by default regardless of the type of the request or response body.
Examples:
op download(): bytes; // Returns a json string with the bytes serialized as a base64.op getContent(): string; // Returns a json stringop getPet(): { // Json object with a name property. name: string;};
Specify content type
The content type for an operation can be specified by including a header parameter named contentType
.
Request content type
op uploadImage(@header contentType: "image/png", @body image: bytes): void;
Response content type:
op downloadImage(): { @header contentType: "image/png"; @body image: bytes;};
Multiple content types
If there is multiples content types for the same body, they can be specified using a union of string.
op uploadImage(@header contentType: "image/png" | "image/jpeg", @body image: bytes): void;
Content type negotiation
There could be cases where you might the same endpoint to return different content depending on the content type requested. This can be achieved in 2 ways:
- using shared routes where different content response is represented as a different operation that share the same endpoint
- using overloads where each different content response is an overload.
For example assuming there is an api that lets you download the avatar as a png
or jpeg
which is decided by what Accept
header is sent.
Option 1: Using shared route
model PngImage { @header contentType: "image/png"; @body image: bytes;}
model JpegImage { @header contentType: "image/jpeg"; @body image: bytes;}
@route("/avatar")@sharedRouteop getAvatarAsPng(@header accept: "image/png"): PngImage;
@route("/avatar")@sharedRouteop getAvatarAsJpeg(@header accept: "image/jpeg"): JpegImage;
Option 2: Using overload
model PngImage { @header contentType: "image/png"; @body image: bytes;}
model JpegImage { @header contentType: "image/jpeg"; @body image: bytes;}
@route("/avatar")op getAvatar(@header accept: "image/png" | "image/jpeg"): PngImage | JpegImage;
@overload(getAvatar)op getAvatarAsPng(@header accept: "image/png"): PngImage;
@overload(getAvatar)op getAvatarAsJpeg(@header accept: "image/jpeg"): JpegImage;
Multipart request
See Multipart docs