# 应用描述语言
# 应用描述语言介绍
应用描述语言可以看作是eggcode项目的dsl(领域特定语言),灵感来源于k8s的声明式描述文件
应用描述语言目前使用YAML格式进行定义描述,字段含义参考了k8s的声明式描述与OpenAPI的字段含义
应用描述语言的目标是通过与写“api文档”类似的方式,来对具体业务进行技术无关的声明式描述
# 应用描述语言字段说明
version: 应用描述语言版本号,目前默认值为v1
kind: 描述类型,目前暂时包括下面子列表列出的类型,后续会继续添加特殊的API类型,例如grpc或者其它必要的类型, 不同类型的yaml文件在文件系统中有特定的组织结构
Project: 项目描述,文件名固定为project.yaml,在/文件路径下
Attribute: 属性描述,在/attributes文件路径下
Schema: 模式或者模型描述,在/schemas文件路径下
Service: 服务描述,文件名固定为service.yaml,在/services/{service_name}文件路径下
Method: 方法描述,在/services/{service_name}/methods文件夹下
HttpApi: http接口描述,在/api/http文件路径下
metadata: 描述元数据,具体类型的元数据字段含义,在下面具体列出
Project Project类型元数据字段说明
name: 项目名称,例子:mmm-worth
description: 项目说明,例子:买买买价值系统
version: 项目版本,例子:0.0.1
repository: 项目代码仓库,例子:gitlab.fjmaimaimai.com/linmadan/mmm-worth
contact: 项目联系人
name: 姓名,例子:linmadan
email: 邮箱,例子:772181827@qq.com
Attribute Attribute类型元数据字段说明
name: 属性名称,例子:taskId
description: 属性说明,例子:任务ID
type: 属性类型,一般为primitive
- primitive: 原始类型,包括:string,boolean,int,int32,int64,uint,uint32,uint64,float32,float64,datetime,bytes
Schema Schema类型元数据字段说明
name: 模式名称,例子:task
description: 模式说明,例子:任务
attributes: 模式属性集合,下列单个属性可以选择只使用ref字段,或者完整的Attribute描述字段
ref: 引用属性描述的name字段,例子:taskId
name: 属性名称,例子:taskId
description: 属性说明,例子:任务ID
type: 属性类型,包括primitive,array,schema
primitive: 原始类型,包括:string,boolean,int,int32,int64,uint,uint32,uint64,float32,float64,datetime,bytes
array: 原始类型数组,或者自定义模式数组,例子:string或者task
schema: 自定义模式,Schema描述的name字段,例子:task
required: 是否为必须属性,例子:true
Service Service类型元数据字段说明
name: 服务名称,例子:task
description: 服务说明,例子:任务服务
Method Method类型元数据字段说明
name: 方法名称,例子:releaseTask
description: 方法说明,例子:发布任务
payload: 方法输入参数属性集合,单个属性可以选择只使用ref字段,或者完整的Attribute描述字段,与上面Schema描述的attributes相同
payload: 方法返回结果属性集合,单个属性可以选择只使用ref字段,或者完整的Attribute描述字段,与上面Schema描述的attributes相同
HttpApi HttpApi类型元数据字段说明
service: 相关服务名称Service描述的name字段,例子:task
path: 路径,例子:/tasks
endpoints: 端点集合
method: 方法名称,Method描述的name字段,例子:releaseTask
route: 端点路由,包括:post,put,get,delete
post: 例子: /{taskId}/release
put: 例子:/{taskId}
get: 例子:/{taskId}
delete: 例子:/{taskId}
params: 额外参数列表,一般只与get方法配合
name: 可以取任意名称,例子:offset