Задайте дополнительные параметры GET в конечной точке api-платформы, используя swagger docs - PullRequest
0 голосов
/ 16 мая 2018

У меня есть проект Symfony, где я использую api-платформу. У меня есть субъект, и у меня есть поставщики данных для него. У меня проблемы с определением дополнительных параметров для конечной точки сбора.

Сущность называется внушением. Он должен вернуть коллекцию документов из упругого поиска.

Конечная точка:

/suggestion

Эта конечная точка прослушивает дополнительные параметры GET:

страница, уровень

Эти два параметра читаются каждый раз, когда запрашивается конечная точка.

В моем SuggestionsCollectionDataProvider.php классе у меня есть:

/**
     * Retrieves a collection.
     *
     * @param string $resourceClass
     * @param string|null $operationName
     * @return \Generator
     */
    public function getCollection(string $resourceClass, string $operationName = null): \Generator
    {
        $query = $this->requestStack->getCurrentRequest()->query;
        // I am reading these two parameters from RequestStack

        // this one is built-in
        $page = max($query->get('page', 1), 1); 

        // this is a custom one
        $level = $query->get('level', 0); 
        ...

В моем SuggestionRepository.php классе:

/**
     * @return \Generator
     */
    public function find(int $page, int $level): \Generator
    {
        // here I can process with $level without problems

Page параметр является параметром по умолчанию, который генерируется в swagger для коллекций.

Скриншот сгенерированного платформой API Swagger doc:

enter image description here

Но параметр page теперь единственный параметр , который можно редактировать в веб-версии.

Мне нужно добавить больше параметров (level в данном случае) к сваггеру и описать их, чтобы пользователь / тестировщик знал, какой параметр фактически идет к этой конечной точке.

Основной вопрос:

Как сообщить api-платформе, что я хочу, чтобы пользователь / тестер API (со стороны клиента) вводил некоторые другие параметры, например, level?

Я два дня изучаю все документы, примеры и не могу понять:)

1 Ответ

0 голосов
/ 16 мая 2018

Наконец-то понял.

Я еще не нашел документацию для него, но нашел способ.

В классе сущностей Suggestion.php Я добавил несколько строкиз аннотаций :

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiProperty;
use ApiPlatform\Core\Annotation\ApiResource;
use Symfony\Component\Serializer\Annotation\Groups;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * Class Suggestion. Represents an entity for an item from the suggestion result set.
 * @package App\Entity
 * @ApiResource(
 *     collectionOperations={
 *          "get"={
 *              "method"="GET",
 *              "swagger_context" = {
 *                  "parameters" = {
 *                      {
 *                          "name" = "level",
 *                          "in" = "query",
 *                          "description" = "Levels available in result",
 *                          "required" = "true",
 *                          "type" : "array",
 *                          "items" : {
 *                              "type" : "integer"
 *                          }
 *                      }
 *                  }
 *               }
 *          }
 *     },
 *     itemOperations={"get"}
 * )
 */

Представление результатов в документах Dagger API:

enter image description here

...