NelmioApiDocBundle - удобная документация для вашего REST Api

В процессе разработки Api наступает момент, когда методов становится слишком много и разобраться в них не представляется возможным.

Тогда нам на помощь приходит NelmioApiDocBundle. Этот инструмент дает нам возможность генерировать документацию, группировать и тестировать методы Api

1. Установка

        
         $ composer require nelmio/api-doc-bundle:^3.0
        
    

В процессе установки будет предложено установить дополнительный пакет, я его себе поставил.

        
            Symfony operations: 1 recipe (006d7495eb659c007cc228bbff3d71fd)
              -  WARNING  nelmio/api-doc-bundle (>=3.0): From github.com/symfony/recipes-contrib:master
                The recipe for this package comes from the "contrib" repository, which is open to community contributions.
                Review the recipe at https://github.com/symfony/recipes-contrib/tree/master/nelmio/api-doc-bundle/3.0

                Do you want to execute this recipe?
                [y] Yes
                [n] No
                [a] Yes for all packages, only for the current installation session
                [p] Yes permanently, never ask again for this project
                (defaults to n): y
              - Configuring nelmio/api-doc-bundle (>=3.0): From github.com/symfony/recipes-contrib:master
            ocramius/package-versions:  Generating version class...
            ocramius/package-versions: ...done generating version class
        
    

2. Маршруты

Теперь нужно добавить новые маршруты в файл: config/routes.yaml

        
        app.swagger_ui:
        path: /api/doc
        methods: GET
        defaults: { _controller: nelmio_api_doc.controller.swagger_ui }

        app.swagger:
        path: /api/doc.json
        methods: GET
        defaults: { _controller: nelmio_api_doc.controller.swagger }
        
    

3. Вывод документации

Чтобы посмотреть сгенерированную документацию необходимо зайти по адресу: http://127.0.0.1:8000/api/doc

Вот что должно получиться в результате:

4. Группировка методов

Количество различных методов API возрастает с каждым днем, поэтому удобно разделить их на группы.

Выделим все методы управления новостями в группу "Новости".

Для этого необходимо использовать следущие аннотации

        
        /**
         * Получение списка последних новостей
         * @SWG\Tag (name="Новости")
         * @SWG\Response (
         *     response=200,
         *     description="Получение списка последних новостей"
         * )
         * @param Request $request
         * @return View
         */
        public function getAllAction(Request $request){
            ...
        
    

Теперь документация выглядит следующим образом: