Swagger-PHP for generating JSON file for Swagger-U

2019-03-31 14:16发布

I am trying to use Swagger-PHP for generating JSON files , so that I can use it with Swagger-UI for auto documentation.

I tried the link :- https://github.com/zircote/swagger-php

Also I tried to work around with there documentation at http://zircote.com/swagger-php/installation.html

But my hard luck , I am unable to implement it.

I am able to install composer correctly. Also the bundle of Swagger-PHP is installed correctly.

But the problem is that I am unable to use/understand the test examples provided by them.

So if anyone has worked it around please help !!

Thanks in advance !!

2条回答
再贱就再见
2楼-- · 2019-03-31 14:46

I've struggled on this one lately and see some differences and managed to get it working and wanted to perhaps shortcut someone else:

// In the controller

/**
 * (other swagger stuff like @SWG\Put, etc...)
 *   @SWG\Parameter(name="type",in="path",description="project|task",
 *                  required=true, type="array",             
 *                  @SWG\Items(type="string"), 
 *                  default="project",
 *                  enum={"project", "task"}),
 * (next @SWG\Parameter or closing paran, etc)
 */

I had previous gotten this working with enum in the model and a @SWG\Items reference to it, but didn't save that code (I was just messing around), and I can't get it back. I even see I previously upvoted the question and accepted answer! But the above is the only way I can get it to work right now and is better than nothing.

查看更多
ゆ 、 Hurt°
3楼-- · 2019-03-31 14:50

You just put comments aka annotations in your code, model example:

/**
* @SWG\Model(
* id="vps",
* required="['type', 'hostname']",
*  @SWG\Property(name="hostname", type="string"),
*  @SWG\Property(name="label", type="string"),
*  @SWG\Property(name="type", type="string", enum="['vps', 'dedicated']")
* )
*/
class HostVps extends Host implements ResourceInterface
{
    // ...
}

Controller example:

/**
 * @SWG\Resource(
 *  basePath="http://skyapi.dev",
 *  resourcePath="/vps",
 *  @SWG\Api(
 *   path="/vps",
 *   @SWG\Operation(
 *    method="GET",
 *    type="array",
 *    summary="Fetch vps lists",
 *    nickname="vps/index",
 *    @SWG\Parameter(
 *     name="expand",
 *     description="Models to expand",
 *     paramType="query",
 *     type="string",
 *     defaultValue="vps,os_template"
 *    )
 *   )
 *  )
 * )
 */
 class VpsController extends Controller
 {
     // ...
 }

Then in console:

php swagger.phar ./your-code-source/ -o ./directory-for-output-files

Then link generated files in Swagger UI. Is this help?

BTW, this documentation: http://zircote.com/swagger-php/annotations.html is incomplete. It's better to rely on parser errors, example:

php swagger.phar ./skynode-api/api/ -o ./foo
Swagger-PHP 0.9.0
-----------------
[INFO] Skipping unsupported property: "foo" for @Swagger\Annotations\Property, expecting "name", "description", "type", "format", "items", "uniqueItems", "required", "minimum", "maximum", "enum", "defaultValue", "_partialId", "_partials" in HostVps in /home/kane/some-dir/some-file.php on line 3

EDIT: Swagger 2.0 has pretty good specification on GitHub

BTW, consider to use Swagger Editor to create api specification file (json/yaml) to use in Swagger UI. Cause inline SWG documentation in php files is just ugly and you don't have autocomplete support in IDE.

查看更多
登录 后发表回答