Как добавить заголовок приложения / json для swagger-php OpenApi

Я использую L5-Форс 5.7. * Упаковка (обертка Форс-PHP) и попробовал описать Laravel REST API. Итак, мой код такой:

/**
* @OA\Post(path="/subscribers",
*     @OA\RequestBody(
*         @OA\MediaType(
*            mediaType="application/json",
*            @OA\Schema(
*               type="object",
*               @OA\Property(property="email", type="string")
*            )
*        )
*    ),
*   @OA\Response(response=201,description="Successful created"),
*   @OA\Response(response=422, description="Error: Unprocessable Entity")
* )
*/
public function publicStore(SaveSubscriber $request)
{
$subscriber = Subscriber::create($request->all());
return new SubscriberResource($subscriber);
}

Но когда я пытаюсь отправить запрос через панель Swagger, я получаю код:

curl -X POST "https://examile.com/api/subscribers" -H "accept: */*" -H "Content-Type: application/json" -H "X-CSRF-TOKEN: " -d "{\"email\":\"bademail\"}"

Как видите, accept — это не application / json, и Laravel не идентифицирует это как AJAX-запрос. Поэтому, когда я отправляю неверные данные и ожидаю получить 422 с ошибками в реальном времени, я получаю 200 кодов с ошибками в «сеансе». Запрос (XHR) через панель swagger также обрабатывается некорректно, код CURL просто для наглядности.

Также я обнаружил, что в предыдущей версии использовалось что-то вроде:

* @SWG\Post(
*     ...
*     consumes={"multipart/form-data"},
*     produces={"text/plain, application/json"},
*     ...)

Но сейчас это уже устарело.

Итак, как получить код 422 без перенаправления, если проверка не удалась? Или, может быть, добавить заголовок «XMLHttpRequest»? Что здесь лучше всего делать?

3

Решение

Ответ (ы) не указали mimetype.

 @OA\Response(response=201, description="Successful created"),

Если вы укажете ответ json, swagger-ui отправит Accept: application/json заголовок.

PS. Поскольку JSON является настолько распространенным, Swagger-PHP имеет @OA\JsonContent сокращенно, это работает для ответа:

@OA\Response(response=201, description="Successful created", @OA\JsonContent()),

и запрашивающий орган:

@OA\RequestBody(
@OA\JsonContent(
type="object",
@OA\Property(property="email", type="string")
)
),
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]