Generates documentation for your REST API from annotations
Find a file
2012-04-14 10:11:52 +02:00
Annotation Added tests for the ApiDoc annotation 2012-04-13 15:20:45 +02:00
Command Add license 2012-04-13 11:03:05 +02:00
Controller Add license 2012-04-13 11:03:05 +02:00
DependencyInjection Add license 2012-04-13 11:03:05 +02:00
EventListener Use proper request properties 2012-04-13 15:21:43 +02:00
Extractor also support services as controller in ApiDocExtractor::get() 2012-04-13 17:56:09 +02:00
Form/Extension Added a way to comment each field of a Form Type 2012-04-13 12:17:11 +02:00
Formatter Added more tests 2012-04-13 14:27:51 +02:00
Parser Fallback to text when no type is present 2012-04-13 14:13:15 +02:00
Resources support controllers as services 2012-04-13 16:33:24 +02:00
Tests added functional tests for services as controller 2012-04-14 10:11:52 +02:00
.gitignore Add gitignore 2012-04-13 14:57:10 +02:00
.travis.yml Add travis config 2012-04-13 14:57:17 +02:00
composer.json Add missing dep 2012-04-14 10:04:55 +02:00
LICENSE Add license 2012-04-13 11:03:05 +02:00
NelmioApiDocBundle.php Renamed missing classes 2012-04-12 18:40:20 +02:00
phpunit.xml.dist Ignore vendor in code coverage 2012-04-13 15:21:45 +02:00
README.md Added travis-ci status 2012-04-14 10:04:55 +02:00

NelmioApiDocBundle

Build Status

The NelmioApiDocBundle bundle allows you to generate a decent documentation for your APIs.

Installation

Register the namespace in app/autoload.php:

// app/autoload.php
$loader->registerNamespaces(array(
    // ...
    'Nelmio'          => __DIR__.'/../vendor/bundles',
));

Register the bundle in app/AppKernel.php:

// app/AppKernel.php
public function registerBundles()
{
    return array(
        // ...
        new Nelmio\ApiDocBundle\NelmioApiDocBundle(),
    );
}

Import the routing definition in routing.yml:

# app/config/routing.yml
NelmioApiDocBundle:
    resource: "@NelmioApiDocBundle/Resources/config/routing.yml"
    prefix:   /api/doc

Enable the bundle's configuration in app/config/config.yml:

# app/config/config.yml
nelmio_api_doc: ~

Usage

The main problem with documentation is to keep it up to date. That's why the NelmioApiDocBundle uses introspection a lot. Thanks to an annotation, it's really easy to document an API method.

The ApiDoc() annotation

The bundle provides an ApiDoc() annotation for your controllers:

<?php

namespace Your\Namespace;

use Nelmio\ApiDocBundle\Annotation\ApiDoc;

class YourController extends Controller
{
    /**
     * @ApiDoc(
     *  resource=true,
     *  description="This is a description of your API method",
     *  filters={
     *      {"name"="a-filter", "dataType"="integer"},
     *      {"name"="another-filter", "dataType"="string", "pattern"="(foo|bar) ASC|DESC"}
     *  }
     * )
     */
    public function getAction()
    {
    }

    /**
     * @ApiDoc(
     *  description="Create a new Object",
     *  formType="Your\Namespace\Form\Type\YourType"
     * )
     */
    public function postAction()
    {
    }
}

The following properties are available:

  • resource: whether the method describes a main resource or not (default: false);

  • description: a description of the API method;

  • filters: an array of filters;

  • formType: the Form Type associated to the method, useful for POST|PUT methods.

Each filter has to define a name parameter, but other parameters are free. Filters are often optional parameters, and you can document them as you want, but keep in mind to be consistent for the whole documentation.

If you set a formType, then the bundle automatically extracts parameters based on the given type, and determines for each parameter its data type, and if it's required or not.

You can add an extra option named description on each field:

<?php

class YourType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder->add('note', null, array(
            'description' => 'this is a note',
        ));

        // ...
    }
}

The bundle will also get information from the routing definition (requirements, pattern, etc), so to get the best out of it you should define strict _method requirements etc.

Documentation on-the-fly

By calling an URL with the parameter ?_doc=1, you will get the corresponding documentation if available.

Web Interface

You can browse the whole documentation at: http://example.org/api/doc.

Command

A command is provided in order to dump the documentation in json, markdown, or html.

php app/console api:doc:dump [--format="..."]

The --format option allows to choose the format (default is: markdown).

For example to generate a static version of your documentation you can use:

php app/console api:doc:dump --format=html > api.html

Configuration

You can specify your own API name:

# app/config/config.yml
nelmio_api_doc:
    name:   My API

Credits

The design is heavily inspired by the swagger-ui project.