基于swagger的RESTful API

基于swagger的RESTful API

摘要: 前言 RESTful架构,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。后端通过提供一套标准的RESTful API,让网站移动端第三方系统都可以基于API进行数据交互和对接,极大的提高系统的开发效率,也使得前后端分离架构成为可能。 …


这里写图片描述

前言

RESTful架构,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。后端通过提供一套标准的RESTful API,让网站,移动端和第三方系统都可以基于API进行数据交互和对接,极大的提高系统的开发效率,也使得前后端分离架构成为可能。
因此,不同的测试,开发团队(前端,移动端,第三方接入者等)都需要围绕API进行开发工作,API的规范和文档对于团队开发,测试变得越来越重要。除了一份标准的文档,我们还希望API能够在线测试使用,从而有更直观的API使用体验,降低API的学习成本。这些对于团队的开发协作都会事半功倍。
本文将介绍一些API文档和开发测试方面的一些实践,使用typeson,docson,swagger-ui等开源工具,建立一个API的集设计,实现,测试,文档的一体化可视平台,让API的开发和使用更加高效。

  • Swagge
    Swagger是一种和语言无关的规范和框架,用于定义服务接口,主要用于描述RESTful的API。它专注于为API创建优秀的文档和客户端库。支持Swagger的API可以为API方法生成交互式的文档,让用户可以通过以可视化的方式试验,查看请求和响应、头文件和返回代码,从而发现API的功能。它本身就非常强大,但是Swagger框架还支持为多种流行的语言——包括JavaScript、Python、Ruby、Java、Scala等等——生成客户端代码。
    swagger [github地址][(2]
  • Swagger-UI
    为基于Swagger规范的API生成基于基于纯粹HTML,javascript,css的在线可视化文档,同时也能成为API的在线测试工具。
    swagger UI github地址

以下为自己整理的swagger UI 使用步骤

1. 首先用git获取swagger UI 代码
2. 然后将代码中 dist内容复制到项目中
以下为个人习惯配置
  • 在入口处添加swagger 和 api-docs 两个文件
  • dist 中内容 复制到 swagger中, 将 dist/json/swagger.json 复制到 api-docs中
3. 修改 index.html

修改代码

  <!-- Some basic translations -->
  <!-- <script src='lang/translator.js' type='text/javascript'></script> -->
  <!-- <script src='lang/ru.js' type='text/javascript'></script> -->
  <!-- <script src='lang/en.js' type='text/javascript'></script> -->

   <script src='lang/translator.js' type='text/javascript'></script>
   <script src='lang/zh-CN.js' type='text/javascript'></script>

目的是支持中文显示

修改代码

 window.swaggerUi = new SwaggerUi({
        url: url,
        dom_id: "swagger-ui-container",
        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
        onComplete: function(swaggerApi, swaggerUi){
          if(typeof initOAuth == "function") {
            initOAuth({
              clientId: "your-client-id",
              clientSecret: "your-client-secret-if-required",
              realm: "your-realms",
              appName: "your-app-name",
              scopeSeparator: ",",
              additionalQueryStringParams: {}
            });
          }

          if(window.SwaggerTranslator) {
            window.SwaggerTranslator.translate();
          }
        },

window.swaggerUi = new SwaggerUi({
        url: '/api-docs/swagger.json',
        dom_id: "swagger-ui-container",
        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
        onComplete: function(swaggerApi, swaggerUi){
          if(typeof initOAuth == "function") {
            /*initOAuth({
              clientId: "your-client-id",
              clientSecret: "your-client-secret-if-required",
              realm: "your-realms",
              appName: "your-app-name",
              scopeSeparator: ",",
              additionalQueryStringParams: {}
            });*/
          }

          if(window.SwaggerTranslator) {
            window.SwaggerTranslator.translate();
          }
        },

修改url 指向swagger.json
删除认证

4. 根据接口修改 配置的swagger.json文件
"swagger": "2.0",
    "info": {
    //接口文档描述
        "description": "This is a sample server Petstore server.  ",
        //接口文档版本号
        "version": "1.0.0",
        //标题
        "title": "Swagger Petstore",
        //服务条款
        "termsOfService": "http://swagger.io/terms/",
        //联系作者
        "contact": {
            "email": "apiteam@swagger.io"
        },
        //许可
        "license": {
            "name": "Apache 2.0",
            "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
        }
    },
    //接口地址
    "host": "petstore.swagger.io",
    //基础地址(模块)
    "basePath": "/v2",
    //标签 为列出的几大接口模块
    "tags": [
        {
            //名称
            "name": "pet",
            //描述
            "description": "Everything about your Pets",
            //外部文档
            "externalDocs": {
                "description": "Find out more",
                "url": "http://swagger.io"
            }
        },
        {
            "name": "store",
            "description": "Access to Petstore orders"
        }
    ],

以上主要修改描述,标题,接口地址,基础地址 和标签

"/pet": {
            //请求方式  支持 post get put delete patch
            "post": {
                //对应标签 可配置多个
                "tags": [
                    "pet"
                ],
                //接口说明
                "summary": "Add a new pet to the store",
                //备注
                "description": "",
                //操作ID 貌似没啥用
                "operationId": "addPet",
                //提交的数据类型
                "consumes": [
                    "application/json",
                    "application/xml"
                ],
                //返回的数据类型
                "produces": [
                    "application/xml",
                    "application/json"
                ],
                //提交的参数(数据)
                "parameters": [
                    {
                        //常用 query formData body header path
                        "in": "body",
                        //参数名称
                        "name": "body",
                        //描述
                        "description": "Pet object that needs to be added to the store",
                        //是否必须
                        "required": true,

                        "schema": {
                            "$ref": "#/definitions/Pet"
                        }
                    }
                //响应
                "responses": {
                    "405": {
                        //描述
                        "description": "Invalid input"
                    }
                },
                //是否弃用
              "deprecated": true
            },
"definitions": {
        "Pet": {
            "type": "object",
            //必须的
            "required": [
                "name",
                "photoUrls"
            ],
            "properties": {
                "id": {
                    //数据类型 常用 integer string array boolean object file等
                    "type": "integer",
                    "format": "int64"
                },
                "category": {
                    "$ref": "#/definitions/Category"
                },
                "name": {
                    "type": "string",
                    "example": "doggie"
                },
                "photoUrls": {
                    "type": "array",
                    "xml": {
                        "name": "photoUrl",
                        "wrapped": true },
                    "items": {
                        "type": "string" }
                },
                "tags": {
                    "type": "array",
                    "xml": {
                        "name": "tag",
                        "wrapped": true },
                    "items": {
                        "$ref": "#/definitions/Tag" }
                },
                "status": {
                    "type": "string",
                    "description": "pet status in the store",
                    "enum": [
                        "available",
                        "pending",
                        "sold"
                    ]
                }
            },
            "xml": {
                "name": "Pet"
            }
        },
        "ApiResponse": {
            "type": "object",
            "properties": {
                "code": {
                    "type": "integer",
                    "format": "int32"
                },
                "type": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                }
            }
        }
    },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值