首页 > 解决方案 > Api 平台自定义 swagger/openapi 上下文主体

问题描述

我正在使用带有 Symfony 4 的 Api 平台,并且我想创建一个自定义端点。一切正常,但我无法更改两件事:正文和响应格式(在 openapi 文档中)。

参数和响应状态代码工作得很好。

*          "login"={
 *              "route_name"="api_login",
 *              "method" = "post",
 *              "openapi_context" = {
 *                  "parameters" = {},
 *                  "body" = {
 *                      "description" ="Username and password",
 *                      "schema" = {
 *                          "type" = "object",
 *                          "required" = {"email","password"},
 *                          "properties" = {
 *                                   "email" = {
 *                                      "type" = "string"
 *                                   },
 *                                   "password" = {
 *                                      "type" = "string"
 *                                   }
 *                          }
 *                      }
 *                  },
 *                  "responses" = {
 *                      "200" = {
 *                          "description" = "User logged in",
 *                          "schema" =  {
 *                              "type" = "object",
 *                              "required" = {
 *                                  "token",
 *                                  "refresh_token"
 *                              },
 *                              "properties" = {
 *                                   "token" = {
 *                                      "type" = "string"
 *                                   },
 *                                   "refresh_token" = {
 *                                      "type" = "string"
 *                                   }
 *                              }
 *                          }
 *                      },
 *                      "401" = {
 *                          "description" = "invalid password or email"
 *                      }
 *                  },
 *                  "summary" = "Login user in application",
 *                  "consumes" = {
 *                      "application/json",
 *                      "text/html",
 *                   },
 *                  "produces" = {
 *                      "application/json"
 *                   }
 *              }
 *          }

标签: symfonyswaggersymfony4api-platform.com

解决方案


这对我有用,请参阅文档。 https://swagger.io/docs/specification/describing-request-body/

 * @ApiResource(
 *     collectionOperations={
 *         "get": {
 *             "method": "GET",
 *             "access_control": "is_granted('ROLE_USER', object)",
 *         },
 *         "post": {
 *             "method": "POST",
 *             "access_control": "is_granted('ROLE_USER', object)",
 *             "openapi_context": {
 *                 "requestBody": {
 *                     "content": {
 *                         "application/ld+json": {
 *                             "schema": {
 *                                 "type": "object",
 *                                 "properties": {
 *                                     "token": {"type": "string", "example": "email@example.com"},
 *                                     "refresh_token": {"type": "string", "example": "123456"},
 *                                 },
 *                             },
 *                         },
 *                     },
 *                 },
 *             },
 *         },
 *     }
 * )

推荐阅读