Платформа API - Как использовать DTO для публикации? - PullRequest
0 голосов
/ 18 ноября 2018

Я использую платформу API в своем приложении Symfony4 для демонстрации своих ресурсов.Это отличная структура, но она заставляет по умолчанию использовать всю вашу бизнес-логику на стороне интерфейса, поскольку она предоставляет все ваши сущности, а не бизнес-объекты.

Мне это не нравится, и я предпочитаю, чтобы моя бизнес-логика была на заднем плане.

Мне нужно создавать пользователей, но есть разные типы пользователей.Итак, я создал UserFactory в бэк-энде.Таким образом, переднему фронту нужно всего лишь протолкнуть бизнес-объект, а бэкенд позаботится обо всем.

Передний фронт никогда не сможет сохранить пользовательский объект непосредственно в БД.Это роль бэк-энда

Следуя этому руководству, использовать DTO для чтения: https://api -platform.com / docs / core / dto / # how-to-use-a-dto-for-read

Я пытаюсь сделать то же самое для публикации.И это работает.Вот мой код контроллера:

/**
 * @Route(
 *     path="/create/model",
 *     name="create-model",
 *     methods={"POST"},
 *     defaults={
 *          "_api_respond"=true,
 *          "_api_normalization_context"={"api_sub_level"=true},
 *          "_api_swagger_context"={
 *              "tags"={"User"},
 *              "summary"="Create a user Model",
 *              "parameters"={
 *                  
 *              },
 *              "responses"={
 *                  "201"={
 *                      "description"="User Model created",
 *                      "schema"={
 *                          "type"="object",
 *                          "properties"={
 *                              "firstName"={"type"="string"},
 *                              "lastName"={"type"="string"},
 *                              "email"={"type"="string"},
 *                          }
 *                      }
 *                  }
 *              }
 *          }
 *     }
 * )
 * @param Request $request
 * @return \App\Entity\User
 * @throws \App\Exception\ClassNotFoundException
 * @throws \App\Exception\InvalidUserException
 */
public function createModel(Request $request)
{
    $model = $this->serializer->deserialize($request->getContent(), Model::class, 'json');
    $user = $this->userFactory->create($model);
    $this->userRepository->save($user);

    return $user;
}

Он прекрасно работает, но я бы хотел, чтобы мой новый ресурс работал в интерфейсе Swagger, поэтому я могу создавать новые методы с помощью метода POST непосредственно в веб-интерфейсе.

Для этого я думаю, что мне нужно заполнить раздел параметров в моем _api_swagger_context.Но я не делаю никаких документов по этому поводу.

Как я могу это сделать?

1 Ответ

0 голосов
/ 04 декабря 2018

Нашел ответ здесь: https://github.com/api-platform/docs/issues/666

Вы можете заполнить параметры следующим образом:

 "parameters" = {
     {
        "name" = "data",
        "in" = "body",
        "required" = "true",
        "schema" = {
            "type" = "object",
            "properties" = {
                 "firstName"={"type"="string"},
                 "lastName"={"type"="string"},
                 "email" = {"type" = "string" }
             }
         },
     },
 },

Больше документов о параметрах для чванства здесь: https://swagger.io/docs/specification/2-0/describing-parameters/

...