yii2 使用 zircote/swagger-php 进行swagger 搭建

网站上关于中文介绍的博客许多东西千篇一律,而且讲的很多都浪费了我大量的时间。

然后就准备咬咬牙看看英语文档:

https://packagist.org/packages/zircote/swagger-php

进行网站进行搭建,使用的是yii2 2.0.12

 

首先记得要处理跨域的问题,因为不同域名下调用post需要进行两次握手, option 之后再 post,入口处添加
header("Access-Control-Allow-Origin:*");
header("Access-Control-Allow-Headers:content-type");
header("Access-Control-Request-Method:GET,POST");
if(strtoupper($_SERVER['REQUEST_METHOD'])== 'OPTIONS'){
exit;
}


使用composer 进行安装

composer require zircote/swagger-php


然后进行下载swagger-ui 这个主要进行一个swagger调试的客户端,没有进行后端的交互,他主要是通过一个json进行初始化工作

https://github.com/swagger-api/swagger-ui

 

然后对这个里面的dist/index.html进行修改json文件的引用,我是将这个客户端放到一个独立的域名下,然后在yii中写入一个方法生成一个json

define('API_HOST',(YII_ENV === 'dev')?'new.rprise.wd.com':'test.com');
$b2broot = Yii::getAlias('@rprise');
$swagger = \Swagger\scan($b2broot);
echo $swagger;exit;

然后将dist/index.html 文件指向这个文件路由

// Build a system
const ui = SwaggerUIBundle({
url: "http://new.rprise.wd.com/user/genswg",    //修改这个位置
dom_id: '#swagger-ui',
deepLinking: true,


为了避免误导大家,还是不多说了,最后还是希望大家还是多看看官方文档

  https://github.com/zircote/swagger-php/blob/HEAD/docs/Getting-started.md  //这里编写了代码的注释规范

 

  看到一愣一愣的时候看看这个

  https://bfanger.nl/swagger-explained/#schemaObject

 

一开始进行搭建代码生成可能会报错

比如

@SWG/info not fount 之类是因为没写注释,总之耐心,相信官网文档,有问题留言一下讨论




最后附上一部分代码,对着案例敲就好了
<?php
namespace rprise\controllers;
use yii\rest\ActiveController;
use rprise\models\ApiLoginForm;
use Swagger;
use rprise\models\ApiSignupForm;
use yii;

/**
* @SWG\Swagger(
* schemes={"http"},
* host=API_HOST,
* produces={"application/json","application/xml"},
* consumes = {"application/json"},
* @SWG\Info(
* title="金融微店企业版",
* version="1.0.0",
* license={"name"="author:zhijie"}
* )
* )
* @SWG\Tag(
* name="user",
* description="用户中心模块",
* @SWG\ExternalDocumentation(
* description="Find out more about our store",
* url="http://swagger.io"
* )
* )
* @SWG\Definition(
* definition="Login",
* @SWG\Property(
* property="mobile_phone",
* description="手机号码",
* type="string",
* example="15767952761"
* ),
* @SWG\Property(
* property="password",
* description="用户密码",
* type="string",
* example="zhijie9417"
* )
* ),
*/
class UserController extends ActiveController
{
public $modelClass = 'rprise\models\user';

public function actionGenswg()
{
define('API_HOST',(YII_ENV === 'dev')?'new.rprise.wd.com':'test.com');
$b2broot = Yii::getAlias('@rprise');
$swagger = Swagger\scan($b2broot);
echo $swagger;exit;
}
/**
* @SWG\Post(path="/user/login",
* tags={"user"},
* summary="用户登录",
* description="返回 access_token",
* @SWG\Parameter(
* in = "body",
* name = "mobile_phone & password",
* description = "手机号码 && 密码",
* required = true,
* type = "string",
* @SWG\Schema(ref="#/definitions/Login"),
* ),
* @SWG\Response(
* response = 200,
* description = " success"
* )
* )
*
*/
public function actionLogin()
{
}

public function actionSignup()
{
}



}




 

posted @ 2018-01-04 15:06  to_simple  阅读(2112)  评论(0编辑  收藏  举报