node.js - Hur man genererar openAPI-specifikation i kod för Azure-funktioner med Node SDK?
Jag har ett API definierat i Azure Functions som jag skulle vilja annotera på ett sätt som kan generera en OpenAPI-specifikation.
Jag har försökt använda tsoa, men det verkar inte vara kompatibelt med serverless. För närvarande genereras OpenAPI-specifikationen med swagger-jsdoc, men att ha deskriptorerna i kommentarer är inte hållbart. Jag skulle vilja ha något liknande det som Swagger gör på .NET-sidan, där jag kan annotera en funktion med ruttinformation och ett bibliotek skulle generera OpenAPI-specifikationen. Finns detta för TypeScript? Jag har också tittat på Azures API-hantering för att generera specifikationen, men funktionerna är för närvarande inte en del av en Funktionsapp (de distribueras som en del av ett statiskt sites API), och jag är inte säker på om API-hantering skulle kunna hantera TypeScript-typerna.
Här är ett exempel på min nuvarande uppsättning med att definiera specifikationen med swagger-jsdoc.
/**
* @swagger
* /api/user:
* get:
* tags:
* - user
* summary: Get the user by Id
* description: "Returns a single user"
* parameters:
* - in: "query"
* name: "id"
* description: "ID of the user to return"
* required: true
* schema:
* type: "string"
* responses:
* '200':
* description: OK
* content:
* application/json:
* schema:
* $ref: "#/components/schemas/User"
* post:
* tags:
* - user
* summary: POST a user to the database
* description: User that needs to be added to the database
* requestBody:
* description: User that needs to be added to the database
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/User'
* required: true
* responses:
* '200':
* description: OK
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/User'
*
* components:
* schemas:
* User:
* type: object
* properties:
* id:
* type: string
* name:
* type: string
*
* @param context The context
* @param req The request
*/
const props: HandlerProperties<User> = {
containerType: config.userContainer
};
export const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
context.res = await handleRequest(toRequest<User>(req), props);
};
export default httpTrigger;
Svar #1
Enligt min undersökning finns det fortfarande inget plugin\sätt som kan stödja det direkt. Även svaret på samma ämne. Vad jag har gjort hittills är att koppla min Azure Functions-app med APIM i Azure och sedan ladda ner det genererade schemat därifrån. Därefter kommer jag att uppdatera schemat manuellt och sedan distribuera det till APIM under distributionsprocessen.