相同点
接口开发流程都是一样的, 这一点 java 和 delphi 完全一样.
都是先接收参数. 解析参数. 处理参数. 到数据库去执行. 组合出参再返给对方.
不同点
delphi 需要手动去解析参数, GetXMLNodeValue(invalue, ‘input.入参1’). 最后出参一般是 变量 + 字符串 拼接的方式组合的.
java 有2种解析方式.
可以像delphi一样可以把入参当做一个 json 对象或 xml 对象来手动解析处理. 参见 https://www.junjun.fun/22_09_19_java_handles_xml_and_json
也可以采用自定义对象的方式. 定义一个入参请求类, 让框架自动把参数解析到类里面.
有了入参请求类, 可以在类中通过注解生成文档, 所有的请求参数可以清晰完整的注释在类里.
这样更方便阅读, 方便维护, java更推荐这种方式.
解析参数和处理参数, 变成了对类进行处理, 对类的属性进行运算.
到数据执行, 全部变成类. 一个表一个类. 根据入参生成一个对象传到数据库. 数据库再返回一个对象回来.
对数据库返回的对象进行处理. 赋值到接口的响应类.
再由框架把类转换成对方需要的xml或者json即可.
例子
需求 传入药品编码, 返回药品生产厂家和购入价.
入参: {drugID:00033398}
出参: {Factory:”重庆九州通制药”,PurchasePrice:”5.23”}
0. 搭建第一步
delphi的银行项目一般是复制一份稳定的其他项目. 再修改增加execute的方法.
java的项目也一样. 直接拉一个新分支. 修改增加controller层. 新定义一个请求类, 增加一个controller方法.
如果要完全重新搭建项目. 可以参考: https://www.junjun.fun/22_11_02_how_to_build_a_new_project/
0.1 controller 层, service层, dao层, bean层
https://www.junjun.fun/22_11_16_whats_the_meaning_of_layered
1. 定义入参类
2. 接收参数并处理参数
此处不太好理解. 对方传的是一个json怎么就变成类了. 不太好解释. 加上@RequestBody注解, 框架就自动转换了.
注意drugInStockRequest.getDrugID(), 此处从类中取到了”00033398”字符串, 并传给了sevice层的queryDrugInStock方法.
3. 执行sql得到响应类 DrugInStockResponse
4. 出参
根据第三步已经得到接口响应对象. 但是需求的字段名还有一点差异. 文档定义生产厂家是 Factory ,而我们是 csccj.
此时DrugInStockResponse中需要指定一个注解. 让框架把类属性按文档生成json
一点思考
如果用delphi写的话, 在执行SQL的时候肯定是一个库存表和药品信息表做一个联合查询. 一句sql了事.
java也可以. 但是不推荐. 为什么不推荐, 我还没搞清楚.
例子的循环查药品信息表, 应该改成 in 执行一次. 但优化之后也需要执行2句sql.
sql从一句变两句是否效率会更高还需要测试.