Как добавить принимаемый заголовок приложения / json для swagger-php OpenApi - PullRequest
0 голосов
/ 06 ноября 2018

Я использую L5-Swagger 5.7. * Пакет (обертка Swagger-php ) и пытался описать REST API Laravel. Итак, мой код такой:

/**
 * @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»? Что здесь лучше всего делать?

1 Ответ

0 голосов
/ 25 ноября 2018

В ответе не указан тип mime.

 @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")
  )
),
...