/**
* 本文件定义了服务的配置信息获取机制, 通过这个机制,运营系统能够自动化的生成服务文档和配置工作;
*
* 目前,我们只需要两种信息的获取
*
* 1. 服务的状态信息, 用于跟踪每一个数据服务当前的状态
* 2. 元数据信息,用于获取对服务的描述,方便一些工作的自动化
*
* 借助服务的状态信息,我们除了能够了解服务的当前健康状态,还可以获取一些其他信息,例如
* 1. 运行时间
* 2. 代码版本号
* 3. 元数据版本号
*
* 其中,元数据版本号十分重要,通过对元数据版本的记录,可以实现增量更新,只有当元数据版本号发生了变化,
* 才需要更新诸如服务文档和配置等信息
*
* 前置声明:
* 1. 每一个服务部署后都需要向管理端提供服务地址,例如
* http://ip:port/svc/firespot
* 服务地址是一个服务的入口地址,其所提供的接口(包含元数据接口)都是以此为前缀
*/
/**
* 服务状态模型定义
*
* 状态接口
*
* GET http://ip:port/svc/firespot/_status
*
* @Remark 可以根据需要扩展状态数据内容
*/
export type ServiceStatus = {
/**
* 服务运行时间, 单位毫秒
*/
uptime: number;
/**
* 代码版本号
*/
codeVersion: number;
/**
* 元数据版本号
*/
metaVersion: number;
}
/**
* 服务元数据模型定义
*
* 元数据接口
*
* GET http://ip:port/svc/firespot/_meta
*/
export type ServiceDescriptor = {
/**
* 服务的名称
*/
name: string;
/**
* 服务的基本描述
*/
desc: string;
/**
* 数据源信息
*/
dataSources: DataSource[];
/**
* 服务接口描述
*/
apis: ServiceInterface[];
}
/**
* 数据源模型
*
* 该模型为通用模型,即可用于表示卫星数据源,也可用来表示其他类型的数据源
*
*/
export type DataSource = {
/**
* 数据源名称
* 葵花8号 ccd | modis
*
* name: 葵花8号CCD
* name: 葵花8号modis
*/
name: string;
/**
* 英文代码
*/
code: string;
/**
* 数据源规格, 实际上就是为了描述不同的价格信息
*/
specs: DataSourceSpec[];
}
/**
* 数据源具体的规格
*/
export type DataSourceSpec = {
/**
* 数据源规格名称 16分钟/次,3米分辨率
*/
name: string;
/**
* 历史价格,单位:元/天/平方公里
*/
historyDataPrice: number;
/**
* 实时价格,单位:元/天/平方公里
*/
realtimeDataPrice: number;
}
type HttpMethod = 'GET' | 'POST';
/**
* 服务接口描述
*/
export type ServiceInterface = {
/**
* 接口名称,例如
* 获取火点列表
*/
name: string;
/**
* 接口路径,例如
* http://ip:port/svc/firespot/list
*
* 其中 /svc/firespot/list 即为接口路径
*/
path: string;
/**
* 接口功能描述
*/
desc: string;
/**
* HTTP 请求方法,目前仅支持 GET/POST两种
*/
method: HttpMethod;
/**
* 请求参数
*/
requestParam: Param[];
/**
* 响应参数
*/
response: string;
/**
* 示例
*/
example: Example[];
}
/**
* 响应参数
*/
export type ResponseParam = {
/**
* 响应头
*/
headers: Param[];
/**
* 响应体
*/
body: Param[];
}
/**
* 请求示例
*/
export type Example = {
/**
* 请求示例
*/
request: RequestExample;
/**
* 响应示例
*/
response: ResponseExample;
}
/**
* 参数
*/
export type Param = {
/**
* 参数的名称
*/
name: string;
/**
* 数据类型
*/
dataType: 'string' | 'int' | 'long' | 'float' | 'double' | 'boolean';
/**
* 参数传输类型,目前不支持通过 http body 传递参数
*/
paramType: 'query' | 'path';
/**
* 是否必填
*/
required: boolean;
/**
* 默认值
*/
defaultValue: string;
/**
* 描述信息
*/
desc: string;
}
/**
* 请求参数示例
*/
export type RequestExample = {
/**
* https、http
*/
schema: 'http' | 'https';
/**
* ip、域名
*/
host: string;
/**
* 端口
*/
port: number;
/**
* 接口路径
*/
path: string;
/**
* GET|POST
*/
method: HttpMethod;
/**
* 头
*/
headers: KeyValue[];
/**
* query参数
*/
query: KeyValue[]
}
/**
* 响应参数示例
*/
export type ResponseExample = {
/**
* 头信息
*/
headers: KeyValue[];
/**
* 体信息
*/
body: Body;
}
/**
* 键值
*/
export type KeyValue = {
key: string;
value: string;
}
export type Body = {
/**
* 编码
*/
code: number;
/**
* 消息
*/
message: string;
}
console