docs: add X-Render-Time header to OpenAPI spec
This commit is contained in:
parent
4a2103c60e
commit
eea9489efc
5 changed files with 58 additions and 0 deletions
|
|
@ -310,6 +310,9 @@
|
||||||
},
|
},
|
||||||
"X-RateLimit-Reset": {
|
"X-RateLimit-Reset": {
|
||||||
"$ref": "#/components/headers/X-RateLimit-Reset"
|
"$ref": "#/components/headers/X-RateLimit-Reset"
|
||||||
|
},
|
||||||
|
"X-Render-Time": {
|
||||||
|
"$ref": "#/components/headers/X-Render-Time"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"content": {
|
"content": {
|
||||||
|
|
@ -405,6 +408,9 @@
|
||||||
},
|
},
|
||||||
"X-RateLimit-Reset": {
|
"X-RateLimit-Reset": {
|
||||||
"$ref": "#/components/headers/X-RateLimit-Reset"
|
"$ref": "#/components/headers/X-RateLimit-Reset"
|
||||||
|
},
|
||||||
|
"X-Render-Time": {
|
||||||
|
"$ref": "#/components/headers/X-Render-Time"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"content": {
|
"content": {
|
||||||
|
|
@ -508,6 +514,9 @@
|
||||||
},
|
},
|
||||||
"X-RateLimit-Reset": {
|
"X-RateLimit-Reset": {
|
||||||
"$ref": "#/components/headers/X-RateLimit-Reset"
|
"$ref": "#/components/headers/X-RateLimit-Reset"
|
||||||
|
},
|
||||||
|
"X-Render-Time": {
|
||||||
|
"$ref": "#/components/headers/X-Render-Time"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"content": {
|
"content": {
|
||||||
|
|
@ -595,6 +604,9 @@
|
||||||
},
|
},
|
||||||
"X-RateLimit-Reset": {
|
"X-RateLimit-Reset": {
|
||||||
"$ref": "#/components/headers/X-RateLimit-Reset"
|
"$ref": "#/components/headers/X-RateLimit-Reset"
|
||||||
|
},
|
||||||
|
"X-Render-Time": {
|
||||||
|
"$ref": "#/components/headers/X-Render-Time"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"content": {
|
"content": {
|
||||||
|
|
@ -693,6 +705,9 @@
|
||||||
},
|
},
|
||||||
"X-RateLimit-Reset": {
|
"X-RateLimit-Reset": {
|
||||||
"$ref": "#/components/headers/X-RateLimit-Reset"
|
"$ref": "#/components/headers/X-RateLimit-Reset"
|
||||||
|
},
|
||||||
|
"X-Render-Time": {
|
||||||
|
"$ref": "#/components/headers/X-Render-Time"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"content": {
|
"content": {
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,32 @@ describe("OpenAPI spec accuracy", () => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const allConversionEndpoints = [
|
||||||
|
"/v1/convert/html",
|
||||||
|
"/v1/convert/markdown",
|
||||||
|
"/v1/convert/url",
|
||||||
|
"/v1/demo/html",
|
||||||
|
"/v1/demo/markdown",
|
||||||
|
];
|
||||||
|
|
||||||
|
describe("X-Render-Time header", () => {
|
||||||
|
it("should define X-Render-Time header component", () => {
|
||||||
|
expect(spec.components.headers["X-Render-Time"]).toBeDefined();
|
||||||
|
expect(spec.components.headers["X-Render-Time"].schema.type).toBe("integer");
|
||||||
|
expect(spec.components.headers["X-Render-Time"].description).toContain("render time");
|
||||||
|
});
|
||||||
|
|
||||||
|
allConversionEndpoints.forEach((endpoint) => {
|
||||||
|
it(`${endpoint} 200 response should include X-Render-Time header`, () => {
|
||||||
|
const response200 = spec.paths[endpoint]?.post?.responses["200"];
|
||||||
|
expect(response200.headers["X-Render-Time"]).toBeDefined();
|
||||||
|
expect(response200.headers["X-Render-Time"].$ref).toBe(
|
||||||
|
"#/components/headers/X-Render-Time"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("should mention rate limit headers in API description", () => {
|
it("should mention rate limit headers in API description", () => {
|
||||||
const description = spec.info.description;
|
const description = spec.info.description;
|
||||||
expect(description).toContain("X-RateLimit-Limit");
|
expect(description).toContain("X-RateLimit-Limit");
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,8 @@ export const convertRouter = Router();
|
||||||
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
||||||
* X-RateLimit-Reset:
|
* X-RateLimit-Reset:
|
||||||
* $ref: '#/components/headers/X-RateLimit-Reset'
|
* $ref: '#/components/headers/X-RateLimit-Reset'
|
||||||
|
* X-Render-Time:
|
||||||
|
* $ref: '#/components/headers/X-Render-Time'
|
||||||
* content:
|
* content:
|
||||||
* application/pdf:
|
* application/pdf:
|
||||||
* schema:
|
* schema:
|
||||||
|
|
@ -120,6 +122,8 @@ convertRouter.post("/html", async (req: Request, res: Response) => {
|
||||||
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
||||||
* X-RateLimit-Reset:
|
* X-RateLimit-Reset:
|
||||||
* $ref: '#/components/headers/X-RateLimit-Reset'
|
* $ref: '#/components/headers/X-RateLimit-Reset'
|
||||||
|
* X-Render-Time:
|
||||||
|
* $ref: '#/components/headers/X-Render-Time'
|
||||||
* content:
|
* content:
|
||||||
* application/pdf:
|
* application/pdf:
|
||||||
* schema:
|
* schema:
|
||||||
|
|
@ -196,6 +200,8 @@ convertRouter.post("/markdown", async (req: Request, res: Response) => {
|
||||||
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
||||||
* X-RateLimit-Reset:
|
* X-RateLimit-Reset:
|
||||||
* $ref: '#/components/headers/X-RateLimit-Reset'
|
* $ref: '#/components/headers/X-RateLimit-Reset'
|
||||||
|
* X-Render-Time:
|
||||||
|
* $ref: '#/components/headers/X-Render-Time'
|
||||||
* content:
|
* content:
|
||||||
* application/pdf:
|
* application/pdf:
|
||||||
* schema:
|
* schema:
|
||||||
|
|
|
||||||
|
|
@ -108,6 +108,8 @@ interface DemoBody {
|
||||||
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
||||||
* X-RateLimit-Reset:
|
* X-RateLimit-Reset:
|
||||||
* $ref: '#/components/headers/X-RateLimit-Reset'
|
* $ref: '#/components/headers/X-RateLimit-Reset'
|
||||||
|
* X-Render-Time:
|
||||||
|
* $ref: '#/components/headers/X-Render-Time'
|
||||||
* content:
|
* content:
|
||||||
* application/pdf:
|
* application/pdf:
|
||||||
* schema:
|
* schema:
|
||||||
|
|
@ -204,6 +206,8 @@ router.post("/html", async (req: Request, res: Response) => {
|
||||||
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
* $ref: '#/components/headers/X-RateLimit-Remaining'
|
||||||
* X-RateLimit-Reset:
|
* X-RateLimit-Reset:
|
||||||
* $ref: '#/components/headers/X-RateLimit-Reset'
|
* $ref: '#/components/headers/X-RateLimit-Reset'
|
||||||
|
* X-Render-Time:
|
||||||
|
* $ref: '#/components/headers/X-Render-Time'
|
||||||
* content:
|
* content:
|
||||||
* application/pdf:
|
* application/pdf:
|
||||||
* schema:
|
* schema:
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,13 @@ const options: swaggerJsdoc.Options = {
|
||||||
example: 1679875200,
|
example: 1679875200,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"X-Render-Time": {
|
||||||
|
description: "PDF render time in milliseconds",
|
||||||
|
schema: {
|
||||||
|
type: "integer",
|
||||||
|
example: 120,
|
||||||
|
},
|
||||||
|
},
|
||||||
"Retry-After": {
|
"Retry-After": {
|
||||||
description: "Number of seconds to wait before retrying the request (returned on 429 responses)",
|
description: "Number of seconds to wait before retrying the request (returned on 429 responses)",
|
||||||
schema: {
|
schema: {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue