zoukankan      html  css  js  c++  java
  • swagger-REST API

     

    swagger简介

              Swagger的使用目的是方便优美的呈现出接口API的各种定义, 生成API文档, 包括参数, 路径之类. 有时后端改了API的参数或者其他设置,同时对于restful风格接口有更加优雅的展示, 前端直接看这个Swagger UI就可以, 方便项目管理和团队协作.。
     
     

    swagger搭建过程

              swagger主要分为两个部分,swagger-ui和swagger-php,ui用于展示,后者用于生成相关api。

              首先,在自己项目的合理位置上下载前端ui和生成的php。放在项目里面是为了保证访问地址和咱们接口地址都在一起,不会是访问时产生跨域问题。

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

             swagger-php:https://github.com/zircote/swagger-php.git

    第一步:ui搭建

           在ui里面有个dist文件夹,修改文件夹里面index.html文件,将url里的位置写成自己的项目地址

     var url = window.location.search.match(/url=([^&]+)/);
     if (url && url.length > 1) {
    url = decodeURIComponent(url[1]);
    } else {
    url = "http://XXXX/doc/swagger.json";
    }

          hljs.configure({
          highlightSizeThreshold: 5000
          });

          到此位置我们的ui已经配置完了。

    第二步:生成环境搭建

    下载swagger-php后,进入此文件夹,使用composer下载swagger-php下载swagger-php所需要的依赖,使用命令行,输入(前提是安装了composer):

    composer update

    这样后台就算完成了搭建,我们的swagger-php多了vender文件夹

    第三步:代码注解

    在我们的controller models的文件中编写注解

     

    控制器注释

    /**
    * @SWGGet(path="/user/login", 请求路径
    * tags={"user"}, 标签
    * summary="用户登录", 概要
    * description="用户手机号登录", 描述
    * operationId="loginUser", 此ID必须在API中描述的所有操作中是唯一的
    * produces={"application/xml", "application/json"},
    * @SWGParameter( 参数列表
    * name="mobile", 参数名
    * in="query", 1表单参数 formData 2查询参数 query 3路径参数 path 4头参数 header
    * description="用户的手机号", 描述
    * default="137********", 默认值
    * required=false, 是否必填
    * type="string" 数据类型
    * ),
    * @SWGParameter(
    * name="code",
    * in="query",
    * description="用户的手机号验证码",
    * default="456789",
    * required=false,
    * type="string"
    * ),
    * @SWGResponse( 返回状态
    * response=200,
    * description="成功",
    * @SWGSchema(type="string"),
    * @SWGHeader(
    * header="X-Rate-Limit",
    * type="integer",
    * format="int32",
    * description="calls per hour allowed by the user"
    * ),
    * @SWGHeader(
    * header="X-Expires-After",
    * type="string",
    * format="date-time",
    * description="date in UTC when toekn expires"
    * )
    * ),
    * @SWGResponse(response=400, description="Invalid username/password supplied")
    * )
    */

     

    模型注释


    /**
    * @SWGDefinition(@SWGXml(name="User")) 属性定义
    */
    class User
    {

    /**
    * @SWGProperty(format="int64")
    * @var int
    */
    public $id;

    /**
    * @SWGProperty()
    * @var string
    */
    public $username;

    /**
    * @var string
    * @SWGProperty()
    */
    public $password;

    /**
    * @var string
    * @SWGProperty()
    */
    public $phone;

    }


    更多了解查看 http://bfanger.github.io/swagger-explained/#/parameterObject



    第四步:文档生成

    第三步也是最重要的一步,生成相关api,生成方式十分简单,只需要在命令行里执行命令 

    php swagge-php/bin/swagger  接口文件夹  -o 生成的目的文件夹  

    "-o" 前面代表API源目录, 即你想要生成哪个目录的API文档, 你的项目代码目录. "-o" 后面是生成到哪个path

    目的文件夹建议写在项目文件夹下,也是为了避免跨域问题。

    每次改动API代码注释之后都要手动生成json文件? 太麻烦了, 写了个controller, 每次访问swagger-ui的这个controller

           $swagger = Swaggerscan('../app');     api路径
    $json_file = "../vendor/zircote/swagger-docs/swagger.json";
    $ss=file_put_contents($json_file, $swagger);



    测试链接   http://192.168.200.110:8084/swagger-ui-master/dist/#!/user/loginUser
     
     
     
     

    Methods

      HTTP协议提供了很多methods来操作数据:

    • GET: 获取某个资源。

    • POST: 创建一个新的资源。

    • PUT: 替换某个已有的资源。

    • DELETE:删除某个资源。

    request  Headers

    • Accept:服务器需要返回什么样的content

    • If-Modified-Since/If-None-Match:如果客户端提供某个条件,那么当这条件满足时,才返回数据,否则返回304 not modified。比如客户端已经缓存了某个数据,它只是想看看有没有新的数据时,会用这两个header之一,服务器如果不理不睬,依旧做足全套功课,返回200 ok,那就既不专业,也不高效了。

    • If-Match:在对某个资源做PUT/DELETE操作时,服务器应该要求客户端提供If-Match头,只有客户端提供的Etag与服务器对应资源的Etag一致,才进行操作,否则返回412 precondition failed。

    Response Headers

    • date:消息发送的时间
    • server:包含处理请求的原始服务器的软件信息            
    • content-type :接收方指示实体的介质类型
    • expires:缓存过期时间

    Status Codes

    • 200 OK - [GET]:服务器成功返回用户请求的数据。
    • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
    • 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    • 204 NO CONTENT - [DELETE]:用户删除数据成功。
    • 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作。
    • 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    • 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    • 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作。
    • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    • 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    • 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。
  • 相关阅读:
    生产uuid
    将Linux命令的结果作为下一个命令的参数
    java中获取接口(方法)中的参数名字(eclipse设置编译参数)(java8 javac -parameters)
    枚举类valueOf方法的疑问
    svn本地客户端和eclipse插件对应不上解决
    rpc框架
    4中map遍历的方法
    java位运算(操作)的使用
    Redis性能点
    关于一次性能调优的反思
  • 原文地址:https://www.cnblogs.com/haoduohou/p/5822780.html
Copyright © 2011-2022 走看看