2012-04-12 18:38:13 +02:00
|
|
|
|
NelmioApiDocBundle
|
|
|
|
|
==================
|
|
|
|
|
|
2012-05-23 09:47:27 +02:00
|
|
|
|
[![Build Status](https://secure.travis-ci.org/nelmio/NelmioApiDocBundle.png?branch=1.0.x)](http://travis-ci.org/nelmio/NelmioApiDocBundle)
|
2012-04-14 02:44:05 +03:00
|
|
|
|
|
2012-04-12 19:42:53 +02:00
|
|
|
|
The **NelmioApiDocBundle** bundle allows you to generate a decent documentation for your APIs.
|
|
|
|
|
|
|
|
|
|
|
2012-04-12 19:10:02 +02:00
|
|
|
|
## Installation ##
|
2012-04-12 18:38:13 +02:00
|
|
|
|
|
2012-04-12 19:10:02 +02:00
|
|
|
|
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"
|
2012-04-13 10:42:31 +02:00
|
|
|
|
prefix: /api/doc
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
|
|
|
|
Enable the bundle's configuration in `app/config/config.yml`:
|
|
|
|
|
|
|
|
|
|
# app/config/config.yml
|
|
|
|
|
nelmio_api_doc: ~
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Usage ##
|
|
|
|
|
|
2012-04-12 19:42:53 +02:00
|
|
|
|
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 ###
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
|
|
|
|
The bundle provides an `ApiDoc()` annotation for your controllers:
|
|
|
|
|
|
|
|
|
|
``` php
|
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Your\Namespace;
|
|
|
|
|
|
2012-04-13 17:11:58 +03:00
|
|
|
|
use Nelmio\ApiDocBundle\Annotation\ApiDoc;
|
|
|
|
|
|
2012-04-12 19:10:02 +02:00
|
|
|
|
class YourController extends Controller
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* @ApiDoc(
|
2012-04-12 20:00:26 +02:00
|
|
|
|
* resource=true,
|
2012-04-12 19:10:02 +02:00
|
|
|
|
* 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()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2012-04-13 10:40:05 +02:00
|
|
|
|
The following properties are available:
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
2012-04-13 10:40:05 +02:00
|
|
|
|
* `resource`: whether the method describes a main resource or not (default: `false`);
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
|
|
|
|
* `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.
|
|
|
|
|
|
2012-04-12 19:42:53 +02:00
|
|
|
|
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.
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
|
|
2012-04-13 12:17:11 +02:00
|
|
|
|
You can add an extra option named `description` on each field:
|
|
|
|
|
|
|
|
|
|
``` php
|
|
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
class YourType extends AbstractType
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* {@inheritdoc}
|
|
|
|
|
*/
|
|
|
|
|
public function buildForm(FormBuilder $builder, array $options)
|
|
|
|
|
{
|
|
|
|
|
$builder->add('note', null, array(
|
|
|
|
|
'description' => 'this is a note',
|
|
|
|
|
));
|
|
|
|
|
|
|
|
|
|
// ...
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
```
|
|
|
|
|
|
2012-04-13 10:40:05 +02:00
|
|
|
|
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.
|
2012-04-12 19:42:53 +02:00
|
|
|
|
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
|
|
|
|
### Documentation on-the-fly ###
|
|
|
|
|
|
2012-04-13 10:40:05 +02:00
|
|
|
|
By calling an URL with the parameter `?_doc=1`, you will get the corresponding documentation if available.
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Web Interface ###
|
|
|
|
|
|
2012-04-13 10:40:05 +02:00
|
|
|
|
You can browse the whole documentation at: `http://example.org/api/doc`.
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
2012-04-12 19:32:40 +02:00
|
|
|
|
![](https://github.com/nelmio/NelmioApiDocBundle/raw/master/Resources/doc/webview.png)
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
2012-04-12 19:42:53 +02:00
|
|
|
|
![](https://github.com/nelmio/NelmioApiDocBundle/raw/master/Resources/doc/webview2.png)
|
|
|
|
|
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
|
|
|
|
### Command ###
|
|
|
|
|
|
2012-04-12 20:01:44 +02:00
|
|
|
|
A command is provided in order to dump the documentation in `json`, `markdown`, or `html`.
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
2012-04-12 19:32:40 +02:00
|
|
|
|
php app/console api:doc:dump [--format="..."]
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
|
|
|
|
The `--format` option allows to choose the format (default is: `markdown`).
|
|
|
|
|
|
2012-04-13 11:31:03 +02:00
|
|
|
|
For example to generate a static version of your documentation you can use:
|
2012-04-12 20:10:23 +02:00
|
|
|
|
|
|
|
|
|
php app/console api:doc:dump --format=html > api.html
|
|
|
|
|
|
2012-04-12 19:10:02 +02:00
|
|
|
|
|
2012-04-12 20:34:19 +02:00
|
|
|
|
## Configuration ##
|
|
|
|
|
|
|
|
|
|
You can specify your own API name:
|
|
|
|
|
|
|
|
|
|
# app/config/config.yml
|
|
|
|
|
nelmio_api_doc:
|
|
|
|
|
name: My API
|
|
|
|
|
|
|
|
|
|
|
2012-04-12 19:10:02 +02:00
|
|
|
|
## Credits ##
|
|
|
|
|
|
|
|
|
|
The design is heavily inspired by the [swagger-ui](https://github.com/wordnik/swagger-ui) project.
|