`
skyHuang
  • 浏览: 105509 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

系统交互之接口开发经验谈

阅读更多
这里所谓的接口,是系统与系统之间的信息交互通道。

  对于一个企业,一般来说肯定不会只有一个数据平台,也就是说不止一个系统。然而,在实际的生产上,由于业务需要,各个平台的数据要在一定程度上做到共享。这就要使用到接口。

  最近一直在开发,测试某银行信贷系统与票据系统的接口,从这其中,结合项目实际,分享一些关于接口的开发经验。

  首先:描述下接口的工作原理。跟所有的BS或者CS程序一样,接口的工作是基于驱动的,这个驱动是一个请求。根据这一特征,我将参与数据交互的系统划分为客户端和服务端。很显然,客户端是发起请求的,服务端是接受请求,处理请求,响应数据的。

  最原本的接口讲到这里应该算是结束了。可是在实际上,接口却并非这么简单。

  客户端和服务端的定位,虽然说在软件世界里,对于接口谁做客户端,谁做服务端是均可实现的,但能实现并不表示合理。我们做软件,做解决方案不仅仅只是要求实现某功能。我们追求系统的合理性,更高的性能,跟切近现实的模型等原则。对于谁做客户端谁做服务端,我举个例子。我是个宅男,周末基本不出门,某天,我给一个脑残的老板打电话叫外卖要了一份‘青椒肉丝面’,最后老板给我送来的有‘红烧牛肉面’,‘兰州拉面’…………等数以百计的品种,让我找出我叫的外卖。很明显是吧,现实生活中没人这么做是吧。在回头对比接口中的服务端和客户端。作为数据的提供者,那你天生就是做客户端的,别的系统给你个请求,你得将请求数据处理好了给客户端,可是你不乐意了,不想做数据处理,好吧,你要争着做客户端,一股脑的把自己有的同类数据全给了应该做客户端而没做成的服务端。请问这跟那个脑残的外卖老板有区别吗?

  结论一:系统间的接口开发,要遵循这样一个原则,谁是数据提供者,谁就是服务端。

  实际开发中,其实也有很多要注意的地方,举例说明。

  1.能不能在开发前,尽量将所需数据要素考虑充分一点,我们可以接受有变化,但不是接受无休止的变来变去。

  2.数据格式能不能选择一个通用一点的,既然是不同系统的数据交互,可能我是java,你是vb,他是c等等。你给我的类型是个java没有的,我给你的是c和vb没有的类型,转换起来不复杂吗?举个实际的例子,你就说这数据类型Date吧,还都是在java系统互相交互,你给我个java.sql.date包下的数据,亲,你知道就你这样给处理会很麻烦知道吗?所以在数据格式的定位上要遵从普遍性。可能非软件人员看你倒腾的越复杂觉得你越牛逼。可是大家都是做软件的,都知道是怎么回事,没必要装。

  3.接受到的数据要做校验。咋我的系统中,也许人民币是用RMB表示,接受数据中给我的表示人民币的代号是#@¥@,你说如果这样的数据你不做校验和转换你拿去有什么用。天知道这代表什么。

  4.一定要有Log日志,这是日常维护的必须手册。同时,也是今后系统间出现重大问题后你的救(敏感词分开写)命稻草,能够划清责任。这个问题我在系统联调上感觉真的是太有作用了,别人发一个请求,然后看到一个相应超时,!@#¥¥%@#¥#¥%跟我说,你那边怎么这么多问题,我怀着上坟的心情去看Log,#@%¥#@,坑爹是吧,你请求都没发到我机器上!!!!

  另外,在某项目开发中,我遇到一个很不爽的问题,信贷和票据做接口,核心跑来插一杆子。虽然,虽然,你给我做了一个中间处理,在一定程度上为信贷和票据都做了一定的贡献,可是我想说,这跟你有什么关系,还是举外卖的例子,这次那脑残老板不是给我数以百计的品种了,是找了个服务员,我叫了个肉丸,服务员给我捅成肉沫送来了。请问是我不能将肉丸嚼成肉沫还是怎么的,是我这边不能处理数据吗?莫名其妙!

  做事要有个原则,否则做出来的东西,那就是个四不像。不依规矩,不成方圆。
分享到:
评论

相关推荐

    安卓开发经验谈

    安卓开发经验谈涉及的IT知识点主要集中在安卓应用开发的各个方面,从基础的SQLite数据库操作到复杂的跨进程通信实现,再到Android内存管理以及Android工程师的职场指导,内容十分丰富,对安卓开发者具有很好的指导...

    Arduino项目开发经验谈

    ### Arduino项目开发经验谈 Arduino作为一种流行的开源电子原型平台,被广泛应用于教学、产品原型设计以及各种创意项目中。本文将根据所提供的标题、描述、标签及部分内容,详细解析与Arduino项目开发相关的知识点...

    WinCE_USB驱动开发经验谈

    ### WinCE_USB驱动开发经验谈 #### 一、WinCE设备驱动程序概述 随着USB 2.0技术的广泛应用及Windows CE对USB 2.0的支持,USB设备驱动开发成为了嵌入式系统开发中的一项重要任务。为了帮助开发者更好地理解和掌握...

    ARM嵌入式软件编程经验谈

    理解这些系统的内核、进程调度、任务管理以及系统调用接口是开发应用的基础。 8. **调试技术**:JTAG、SWD等调试接口以及相关工具的使用,可以帮助开发者在开发过程中定位和解决问题。 9. **功耗优化**:在嵌入式...

    opengl或directX环境下3D游戏开发经验谈

    OpenGL是跨平台的,广泛应用于Linux、Windows和MacOS等操作系统,而DirectX则主要针对Windows系统,尤其在游戏开发中占据主导地位。 在学习3D游戏开发的过程中,首先需要掌握3D图形学的基本原理和数学知识,包括...

    单片机经验谈.zip

    本压缩包“单片机经验谈.zip”包含了一些关于单片机开发与应用的文档,通过这些文档我们可以深入探讨单片机开发过程中的重要知识点。 1. **消息编程**:在单片机编程中,消息编程是一种处理事件和交互的方式,通常...

    软件项目测试管理经验谈

    ### 软件项目测试管理经验谈 #### 一、软件测试员自身素质培养 软件测试作为软件开发的重要环节,其质量直接影响到软件产品的稳定性和用户体验。因此,培养优秀的软件测试人员至关重要。以下几点建议有助于提升...

    sap rfc 总结 经验谈

    SAP RFC(Remote Function Call,远程函数调用)是SAP系统中的一种核心技术,用于在不同的SAP组件之间以及SAP与非...了解和掌握这些知识对于SAP系统管理员和开发人员来说至关重要,有助于优化企业流程、提升系统效率。

    powerbuilder编程经验谈.

    PB编程经验谈涵盖了从基础到高级的各种技巧和最佳实践,旨在帮助开发者提升效率,创建稳定且功能丰富的应用程序。 1. **PowerBuilder基础** - **语法与结构**:PB使用类似SQL的语法,使得数据库操作直观易懂。它...

    结构设计一个经验谈.doc

    在软件开发过程中,结构设计是至关重要的一步,它关乎到系统的可维护性、扩展性和性能。本文将基于个人的经验,探讨结构设计的一些核心概念、原则和常见方法,以期为IT行业的专业人士提供一些实用的指导。 首先,...

    浅谈单片机接口技术.pdf

    总而言之,单片机接口技术是硬件开发领域的一项关键技术,它使得单片机可以高效、稳定地与其他设备及系统进行通信,为工业自动化、智能控制等提供了技术支持。随着技术的不断发展,单片机接口技术也在不断进化,它对...

    浅谈变电站综合自动化系统的维护管理.pdf

    其中,模拟量的输入与输出系统作为二次系统与一次系统之间的接口,是数据采集和自动控制信号源的基础。微机是数据处理和运算的核心,但它只能识别数字信号,因此需要通过模数转换器将模拟信号转换为数字信号,处理...

    Verilog经验谈

    在Verilog语言中编写高质量、易于维护的代码是任何硬件设计项目成功的关键因素之一。特别是在大型项目中,遵循一套严谨的设计规范尤为重要。本文将根据提供的信息片段,深入探讨关于Verilog编程的一些重要原则和最佳...

    浅谈中波广播发射机自动化监控系统的更新改造.pdf

    对于有自动化监控接口的发射机,系统可以直接与之通信,进行参数获取和控制;对于不具备接口的发射机,系统则通过模拟量和开关量的隔离采集,确保不干扰发射机的正常运行。该系统的智能化程度在很大程度上决定了广播...

    【最新】关于ARM和嵌入式系统方向--同济大学软件学院院长谈嵌入式就业方向.doc

    有两种主要的角色:一类是硬件工程师,他们专注于硬件设计,包括处理器、存储器等核心组件的选择和优化,以及BootLoader、Board Support Package (BSP)的开发,确保硬件与操作系统之间的良好交互。这类工程师需要...

    21从亚马逊的实践,谈分布式系统的难点1

    分布式系统是一种复杂的软件架构,它将单一应用分解为多个互相协作的组件,这些组件分布在不同的计算机上,通过网络通信进行交互。亚马逊作为分布式服务架构的先驱,早在2002年就开始实施这一策略,其核心原则是通过...

    浅谈电力系统继电保护事故的分析和改进方法.pdf

    电力系统继电保护是保障电网安全稳定运行的关键技术,它主要负责在电力设备出现故障时,迅速隔离故障点,防止故障扩大,确保无故障部分继续正常供电。本文着重分析了继电保护事故的原因并提出了相应的改进策略。 ...

Global site tag (gtag.js) - Google Analytics