Files
msgexchange-v2/docs/contracts/interface-contract.md
T

11 KiB
Raw Blame History

接口契约草案

本文记录 msgexchange-v2 与联调工具、运营航班显示界面、CIIMS adapter、admin-api、Elasticsearch 航班历史存储之间需要共同遵守的接口。范围由 requirements.mdUS-02US-08US-09US-12US-13US-14architecture.md「系统定位与范围」「数据归属与一致性」确定;下表没有给出字段的地方,不能作为字段级联调依据。

《msgexchange-api 旧项目业务逻辑与用户故事文档》只提供现役行为基线。下文的“现役候选”是待对拍的字段线索;旧系统未校验收报 XML、Kafka 批次可能丢失、航班从 Redis 转历史的做法不改变本文件的目标边界。

HTTP

接口 请求契约 成功响应契约 失败契约 尚需确定
POST /cminmsgs/send 请求体是 XML 原文;接受 text/xmlapplication/xmltext/plain,默认 UTF-8;仅限内网,网络层限制来源。 报文写入 CMINMSGS 后返回信箱编号;该响应只证明已落信,不证明业务处理或下游投递。 空报文、超大小上限、非法 XML 不落信并返回错误;写信失败不返回编号;XML 解析禁用外部实体和外部资源访问。 大小上限、请求编码与 Content-Type 的精确处理规则、HTTP 状态码、成功/失败响应体字段及样例。
POST /schd/sync 触发向 AODB 请求日计划的 RQFD 请求。 响应内容尚未定义。 错误响应尚未定义。 请求字段、重复调用语义、请求登记或落信与响应之间的关系、状态码、响应字段及样例。
GET /all/flights 无已定义的请求字段;从 Redis 查询投影读取当前全部动态航班,不含共享航班。 返回查询到的航班集合。 Redis 异常时返回错误,不能返回空列表伪装成功。 查询参数、分页规则、航班字段与类型、集合外层结构、状态码和错误响应样例。

现役候选:三个接口使用 ResponseDto,字段为 is_successerr_codeerr_msgbody(旧项目用户故事「HTTP 接口清单」)。POST /cminmsgs/send 的成功 bodyCMINMSGS_ID,旧样例为 {is_success: true, body: <ID>}GET /all/flightsbody 是非共享航班的 SCHD.FLTR 列表。POST /schd/sync 的旧请求体是 {startDate, endDate},旧格式 yyyy-MM-dd hh:mm 使用无 AM/PM 的 12 小时制,存在时间歧义;字段是否沿用、时间改用何种无歧义格式、响应是否沿用封装,都需对拍后定稿。

/schd/sync 把日期范围编码为 RQFD.STDB / STDE,旧出站报文使用 TYPE=RQFDSTYP=NONESNDR=OSH5(旧项目用户故事「日计划请求」)。这些是报文构造线索,发送方取值、时间格式与新版请求跟踪语义仍需对接方确认。

Kafka

主题 已确定的消息语义 尚需确定
msg 单条航班变更通知;处理航班动态与删除后投递,发送失败自动重试;同一 FLID 的变更保序,对外按至少一次投递。 Kafka key、value 的字段与类型、变更和删除的区分方式、版本与去重标识、编码方式、分区规则、消费者处理重复和乱序的规则。
schd 定时批量发送最新航班状态;发送失败自动重试;对外按至少一次投递。 “批量”对应的 Kafka record 粒度、key/value 字段与类型、删除航班的表达方式、批次边界、编码方式、消费者去重规则。

现役候选:msg 的 value 是 MSG 的 JSON,包含 META 与对应业务体;日计划到达通知只有 METAschd 每次把窗口内航班组成 SCHD.FLTR 数组 JSON,队列为空时不发送(旧项目用户故事「前端通知」);这能提供消费者样例,仍不能确定新版的 Kafka key、最新状态聚合粒度或去重标识。

跨航班顺序不构成契约;测试环境须使用独立 Kafka 主题。

数据库读写边界

共享 MySQL:外部信箱

本系统的操作 需要对接方提供的物理契约
CMINMSGS 按信箱编号升序、分批读取处理标记为空的报文;兼容 HTTP 入口写入 XML 原文;处理完成后仅将空处理标记写成库方认可的已处理值。 表 DDL、信箱编号及报文原文字段、处理标记与处理时间字段、列类型与可空性、写入必需列、标记允许值、原文保留期和索引。
COUTMSGS 写入 RQRD 参考数据请求与 RQFD 日计划请求;CIIMS adapter 消费。交付承诺止于请求落信。 表 DDL、请求原文字段、写入必需列、编号生成方式、ACK/错误列的写入责任、重复落信的识别规则。

共享 MySQL 归 CIIMS adapter 方所有;本系统不建表、不改表结构、不清除数据,也不写共享历史表。外部表的物理字段必须以对接方提供的现行 DDL 与读写样例核对,不能由本文件推造。

旧项目用户故事「数据表列清单」提供以下实体映射列名,不是现场 DDL、可空性或写权限的证明:

现役实体映射列名 现役写入线索
CMINMSGS CMINMSGS_IDCMINMSGS_CLOB_MSGCMINMSGS_DATE_RECEIVEDCMINMSGS_DATE_PROCESSEDCMINMSGS_STATUSCMINMSGS_SUBSYSTEM_DATE_SENTCMINMSGS_SUBSYSTEM_NAMECMINMSGS_SUBSYSTEM_SEQUENCECMINMSGS_SUBSYSTEM_SUBTYPECMINMSGS_SUBSYSTEM_TYPE 兼容入口写原始 XML 与接收时间,处理时间为空;新版必须先按 US-02 校验 XML。
COUTMSGS COUTMSGS_IDCOUTMSGS_ACK_DATE_RECVCOUTMSGS_ACK_REQDCOUTMSGS_ACK_RESEND_TIMESCOUTMSGS_CLOB_MSGCOUTMSGS_DATE_INSERTEDCOUTMSGS_DATE_SENTCOUTMSGS_ENCRYPTCOUTMSGS_ERRORCOUTMSGS_FINAL_GROUP_INDCOUTMSGS_GROUP_IDCOUTMSGS_GROUP_ORDERCOUTMSGS_NO_MESSAGESCOUTMSGS_TRUEFALS_GROUPROUTINGID /schd/sync 写报文 XML、插入时间与 ROUTINGID=OSH5RQFDACK/错误列的写入责任仍未确认。

自有 PostgreSQL:内部存储与下游读取

表或表组 边界 尚需确定的字段级契约
REF_MASTER 静态参考数据与资源状态按类别、编号保存在独立数据表,admin-api 直接只读;新消息覆盖旧记录,全量消息整体替换,增删改消息逐条处理。 类别和编号的物理列、各类别字段及类型、主键/唯一键、空值表示、更新可见性。类别范围与消息中的识别标签见下表。
FLIGHT_SCHD、资源明细表、FLIGHT_ROUTE_POINT 航班当前态的唯一权威;Redis 和 Kafka 从处理结果派生,不反向覆盖这些表。 主键、字段与类型、资源明细表清单、外键/索引、版本字段及迁移 DDL。
PROC_STATEMSG_EVENTREQ_TRACKSCHD_SNAP_LOGPIPELINE_LOCKUNMAPPED_FIELD 管道处理、待发事件、请求跟踪、留痕、互斥及未映射字段由本系统维护;不对外提供直接读写接口。 字段、约束、索引与迁移 DDL 由内部实现设计确定;若其他系统需读取,须另立读取契约。

自有 PostgreSQL 的物理表结构由本系统的迁移 DDL 定稿。生产环境若改用 Oracle 11g,字段类型与迁移方案需先完成适配验证。

静态参考数据类别与编号来源

类别码与识别标签来自架构引用的 SIS 接口规范;每条普通参考记录以对应类别码和识别标签值组成逻辑身份。标签值的格式、唯一范围和 REF_MASTER 中的物理存储方式,仍需在本系统的表结构中明确。

类别码 类别 消息中的识别标签 SIS 依据
COUL 国家代码 COUC SIS:3.1
ARPT 机场代码 ITCD SIS:3.2
AIRL 航空公司代码 ITOP SIS:3.3
AIRC 机型代码 ITAT SIS:3.4
REGN 注册号 RNUM SIS:3.5
ORGN 机构代码 OGID SIS:3.6
FLTL 航班类型代码 FTYP SIS:3.7
TLST 航站楼代码 TCOD SIS:3.8
GLST 登机门代码 GCOD SIS:3.9
SLST 机位代码 SCOD SIS:3.10
CLST 值机柜台代码 CCOD SIS:3.11
BLST 行李转盘代码 BCOD SIS:3.12
CHLT 行李滑槽代码 CCOD SIS:3.13

资源状态是第十四类消息,类别码为 RSTASIS:3.14),识别一条资源状态时须同时使用资源类型 RTYP 和资源编号 RSIDCLSTCHLT 都使用 CCOD 标签,因此不能脱离类别码识别记录。

Elasticsearch 航班历史写入

契约项 已确定的边界 尚需确定
写入对象 满足 US-14 已结束判据的航班从自有业务数据库写入 Elasticsearch 历史库,作为历史查询副本。 历史索引名称、文档 ID、写入字段及类型、嵌套资源结构、字段缺失与删除状态的表达方式。
成功确认 只有该航班的历史写入成功,才允许从实时数据物理删除;删除前按 D1 必要时登记待发删除事件。 Elasticsearch 写入响应中何种结果算成功、成功是否要求可查询、批量响应如何逐项确认。
写入粒度 单个航班写入失败不影响其他航班。 使用逐条请求还是批量请求、批量大小、部分成功时的确认与继续处理规则。
失败与重试 写入失败的航班保持在实时数据中,下次运行再试;已写入的航班不重复写入;正在被消息处理的航班跳过,下轮再处理。 超时或响应不明时的对账方式、可重试错误分类、重试间隔、文档 ID 和覆盖策略如何保证幂等。

Elasticsearch 的接口样例与映射确认前,不得以“请求已发送”代替逐航班的成功确认,也不得清除写入结果不明的实时数据。

现役候选:旧项目逐航班查询 flight_hts 中的 SODT + FLID 组合,存在则更新,不存在则新增;写入内容是 SCHD.FLTR 序列化后的 JSON,单条写入失败跳过该航班(旧项目用户故事「动态航班转历史」)。flight_hts 是旧索引名,SODT + FLID 是旧查询条件;新版索引、文档 ID、字段集合和 Elasticsearch 响应的逐航班成功判据仍需确定。

定稿所需证据

  1. 对拍三个 HTTP 接口的现役候选字段,取得成功和失败响应样例、实际状态码及 /schd/sync 的无歧义时间格式。
  2. 运营航班显示界面的 msgschd 消费样例和字段要求,特别是变更、删除、重复投递的处理方式。
  3. CIIMS adapter 方提供的 CMINMSGSCOUTMSGS 现行 DDL、读写样例和写权限说明,并核对现役实体映射列名。
  4. 13 类参考数据与资源状态的编号规则,以及自有 PostgreSQL 的迁移 DDL。
  5. Elasticsearch 历史索引映射、文档样例、逐条或批量写入响应,以及写入结果不明时的对账规则。

只有上述证据核对完成后,待定字段才能转为字段级契约;任何新增字段、默认值或错误码都需写明其来源与对接方。