项目作者: TheNorthMemory

项目描述 :
the dubbo rpc services and the swagger integration
高级语言: JavaScript
项目地址: git://github.com/TheNorthMemory/dubbo-swagger.git
创建时间: 2018-10-28T12:32:49Z
项目社区:https://github.com/TheNorthMemory/dubbo-swagger

开源协议:

下载


DUBBO SWAGGER

NPM version
npm module downloads per month

English Version

得益于开源项目 OpenAPI-Specificationnode-dubbo,使用纯JavaScript远程消费 DUBBO 服务。

项目结构

  1. ├── api
  2. ├── any_validFolder-com.foo.interface
  3. ├── complex.yaml
  4. ├── minus.yaml
  5. ├── plus.yaml
  6. └── meta.json
  7. ├── bin
  8. └── flush.js
  9. ├── index.js
  10. ├── lib
  11. ├── consumer.js
  12. └── descriptor.js
  13. ├── package.json
  14. └── static
  15. ├── index.html
  16. ├── swagger.json
  17. └── swagger.yaml

环境变量

  • process.env.ZKADDR

    zookeeper 注册中心地址,如未设置,http服务仅能当作接口文档,无法发起有效RPC调用

  • process.env.PORT || 3030

    koa http server 监听端口

  • process.env.CLUSTERNUM || 1

    nodejs cluster 进程数目,windows 平台默认为1,*nix 平台默认为 CPU 核数

  • process.env.OAI_EXT_FLAT || 'x-flat'

    OAS 扩展key,声明入参是扁平入参

  • process.env.OAI_EXT_OBJECT || 'x-object'

    OAS 扩展key,声明入参(有且只有1个入参)是对象入参

  • process.env.OAI_EXT_MAP_KEY || 'x-key'

    OAS 扩展key,声明入参如果是Map对象,map-key的数据类型描述

  • process.env.OAI_ARRAY_COLLECTION || ','

    OAS 默认array类型分隔符

  • process.env.APPHOST || 'dubbo.io'

    bin/flush.js 生成文档时的默认主机地址

  • process.env.NO_WRITE

    如设置此变量,bin/flush.js 仅校验yaml语法是否正确,不写入最终 static/swagger.*

bin/flush.js

作用是把目录 api/*/*.yaml 文件组合生成为 static/swagger.* 文件

lib/consumer.js

dubbo consumer wrapper

lib/descriptor.js

入参转换核心部件,把 HTTP POST (ctx.request.fields) 转换成 hessian.js 入参

index.js

HTTP 入口,路由监听 /providers/:serviceName/:serviceMethod 消费 DUBBO RPC 服务

static/index.html

swagger-ui 入口

api/*/meta.json

  • interface
  • timeout
  • group
  • version
  • tags

    扩展的 swagger UI 标签,Array[String] 结构

基础OAS数据结构与 js-to-java 类型映射

  1. 'boolean' : java.Boolean,
  2. 'string' : java.String,
  3. 'string_byte' : java.Byte,
  4. 'string_date' : java.Date,
  5. 'string_date-time' : java.Date,
  6. 'number' : java.int,
  7. 'number_float' : java.Float,
  8. 'number_double' : java.Double,
  9. 'integer' : java.Integer,
  10. 'integer_int64' : java.Long,
  11. 'object_map' : java.Map,
  12. 'array_boolean' : java.array.Boolean,
  13. 'array_string' : java.array.String,
  14. 'array_string_byte' : java.array.Byte,
  15. 'array_string_date' : java.array.Date,
  16. 'array_string_date-time' : java.array.Date,
  17. 'array_number' : java.array.int,
  18. 'array_number_float' : java.array.Float,
  19. 'array_number_double' : java.array.Double,
  20. 'array_integer' : java.array.Integer,
  21. 'array_integer_int64' : java.array.Long,

示例

api/any_validFolder-com.foo.interface/meta.json

  1. {
  2. "interface": "com.foo.interface",
  3. "timeout": 100,
  4. "tags": [
  5. "Math测试"
  6. ]
  7. }

api/any_validFolder-com.foo.interface/plus.yaml

  1. summary: 'a+b=?'
  2. x-object: com.foo.rpc.plus
  3. parameters:
  4. - name: a
  5. in: formData
  6. type: integer
  7. format: int32
  8. - name: b
  9. in: formData
  10. type: integer
  11. format: int32
  12. responses:
  13. '200':
  14. description: ''

api/any_validFolder-com.foo.interface/minus.yaml

  1. summary: 'a-b=?'
  2. x-flat: true
  3. parameters:
  4. - name: a
  5. in: formData
  6. type: integer
  7. format: int32
  8. - name: b
  9. in: formData
  10. type: integer
  11. format: int32
  12. responses:
  13. '200':
  14. description: ''

api/any_validFolder-com.foo.interface/complex.yaml

  1. summary: 'complex request'
  2. x-object: com.foo.rpc.complex
  3. parameters:
  4. - name: a
  5. in: formData
  6. type: integer
  7. format: int64
  8. required: true
  9. - name: b
  10. in: formData
  11. type: string
  12. required: true
  13. - name: c
  14. in: formData
  15. type: array
  16. items:
  17. type: string
  18. - name: d
  19. in: formData
  20. type: object
  21. additionalProperties:
  22. x-key:
  23. type: string
  24. type: string
  25. - name: e
  26. in: formData
  27. type: array
  28. items:
  29. type: integer
  30. format: int64
  31. - name: f
  32. type: number
  33. nullable: true
  34. format: double
  35. - name: g
  36. nullable: true
  37. type: integer
  38. - name: h
  39. nullable: true
  40. type: number
  41. format: float
  42. - name: i
  43. in: formData
  44. nullable: true
  45. type: array
  46. items:
  47. type: object
  48. x-object: io.dubbo.model.one
  49. properties:
  50. J:
  51. type: integer
  52. format: int64
  53. K:
  54. type: string
  55. L:
  56. type: array
  57. items:
  58. type: string
  59. M:
  60. type: object
  61. x-object: io.dubbo.model.two
  62. properties:
  63. N:
  64. type: string
  65. O:
  66. type: integer
  67. format: int64
  68. - name: p
  69. in: formData
  70. type: integer
  71. format: int64
  72. default: '0'

安装依赖

npm install

运行

ZKADDR=127.0.0.1:2181 DEBUG=dubbo:* CLUSTERNUM=1 NO_DEPRECATION=koa node index.js

打开浏览器访问 http://127.0.0.1:3030 即可看到 swagger ui 提供的基础参数界面;使用 Try it out 可以发起正常的表单输入;使用 Execute 即可发起dubbo RPC调用。

Licensing

MIT