`
spxsjd
  • 浏览: 16485 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

对外接口注意点

阅读更多

在公司一直在做一些 对外接口的 项目,包括rest、hession、webservice、ice等类型API。在项目的 重构 优化过程中,发现对外暴露的接口主要存在的问题和改进方案总结如下:

 

(1)、接口的异常处理:对外暴露的接口,都是采用远程调用的方式访问,建议都不要显式地抛出异常 ,其原因有主要有两点 : 一是调用方捕获不到这些异常,其次去捕获这些异常也肯定消耗很多网络带宽,有些得不偿失。如果一定要处理异常信息,建议在接口实现里把异常都处理掉,需要提示给调用者的,返回错误标识,比如用不同的整数值表示各种错误,这样调用者即可根据错误标识来继续处理业务。

 

(2)、关于参数校验:远程接口传入的参数,尽量都要进行校验 ,这样一方面可以避免发生各种由于参数不合法而引起的运行时异常,同时还可以给调用者以明确的提示。但是,如何校验参数,其实也还是有些要注意的。在项目里发现一些实现里使用断言机制校验参数,结果运行时参数不合格就直接返回了 IllegalArgumentException 异常,这样做结果引起系统因为调用参数不合格而打印的没有什么实际价值的日志信息越来越多,而且调用方也捕获不到异常,调用者还不知道出错原因。建议直接编码来验证参数,不合格时返回错误标识;还有就是参数校验的顺序,建议根据出错的概率和验证参数的难易程度来顺序校验参数,对于那些复杂的(比如要查询数据库进行校验)校验逻辑放在比较容易验证的参数后面,其好处不言而喻了。

 

(3)、返回结果:在 相关API 项目里目前大都用 XXXResult 名称格式的类来包装错误标识值和结果信息,都是非常好的模式。但是对于 Rest 风格的接口,结果发现返回的 XML 结果几乎没有统一的规范 如果有使用过支付宝接口的开发者应该注意到,支付宝接口的返回结果就定义的非常规范和统一,包括错误表示、结果信息、请求参数、签名机制等都有详细的定义,同时每个接口返回的 XML 数据格式都是一致的,让调用者查看和处理结果都非常清晰。

 

(4)、关于性能:目前,大多数 API 项目 都是采用某种支持 框架来对外暴露接口 。其实,每种框架都有其适用性和局限性,怎么合理应用框架真的很重要的,在优化的过程,就发现接口实现实际上耗用的时间非常少,大部分时间都去构造接口实现对象去了。对于性能优化,其实有很多思想和模式可讨论,主要想说的几点就是:关键是要发现瓶颈 ,把代码逻辑分解开来,跟踪每段代码的执行,查看堆栈都是不错的手段;其次是可以根据业务情况,进行业务上的优化也非常不错 ,比如有些实时性要求不高的业务逻辑可以异步处理等等;还有的就是一些技巧方面,包括使用缓存,把执行结果缓存起来,多线程同时处理计算结果等。

 

注:该文章于08年12月在公司内部分享的,希望给大家有所帮助。

分享到:
评论

相关推荐

    小区子系统对外开放接口文档-V1.0.21

    本文档《小区子系统对外开放接口文档-V1.0.21》主要针对智慧园区综合管理平台中的小区应用,提供了对外接口的详细规格和使用指南,旨在帮助第三方厂家、合作伙伴和开发者理解并利用这些接口进行集成和开发工作。...

    基础数据对外开放接口文档-V1.0.41

    API开放对外接口主要涉及到资源令牌(Token),这是一种用于资源认证的随机数。Token在API调用中起到关键作用,确保只有经过授权的用户或系统能够访问特定的资源。资源通过URI(统一资源标识符)进行标识,URI是用于...

    高精地图引擎接口说明文档V1.7(标准版对外接口文档).pdf

    "高精地图引擎接口说明文档V1.7(标准版对外接口文档)" 本文档是百度高精地图引擎接口说明文档的V1.7版本,旨在提供关于高精地图引擎的接口说明和使用指南。高精地图引擎是一种高精度的Location-Based Service...

    JEECG Online 表单对外接口v3.61

    **JEECG Online 表单对外接口v3.61** **一、表单信息查询接口** 1. **请求地址** - 该接口用于获取指定条件下的表单信息,其请求地址通常由服务器域名或IP加上特定的API路径构成。例如:`...

    致远OA8.0自定义业务接口配置、调用方法.pdf

    2. **接口实现**:接着,我们进入应用包的管理设备,选择对外接口,然后新建一个表单接口。在接口定义环节,我们需要为接口取一个清晰易懂的名称,选择对应的无流程表单,并设定为公开调用。接口描述应当详尽,以便...

    腾讯对外接口API文档.docx

    腾讯对外提供的API文档是开发人员与腾讯各类服务交互的重要工具,涵盖了广泛的接口,包括微博、帐户管理、关系链管理等多个方面。以下是这些接口的主要功能和应用场景的详细说明: 1. **OAuth授权**: - `request_...

    工地子系统对外开放接口文档-V1.0.31

    文档中提到了关键术语"api开放对外接口",这表明系统提供了API(应用程序编程接口),允许外部应用通过调用这些接口来获取或修改工地子系统的数据。"token资源令牌"是一种安全机制,通常用于身份验证和授权,确保...

    Oracle EBS 常用接口开发参考

    开发时需要注意发票的各个字段映射,如供应商信息、发票号、金额等,并确保符合会计法规和企业内部流程。 2.2 **其他模块接口** Oracle EBS的其他模块如采购、库存、销售等也有相应的接口。例如,采购订单接口(PO ...

    考勤子系统对外开放接口文档-V1.0.21

    4. 使用指南:提供了如何正确使用接口的步骤和注意事项,包括可能出现的问题和解决办法。 5. 错误处理:详细介绍了在对接过程中可能出现的错误代码及其含义,帮助开发者快速定位并解决问题。 6. 示例代码:提供...

    动环子系统对外开放接口文档-V1.0.01

    智慧园区综合管理平台的动环子系统对外开放接口文档V1.0.01主要面向第三方厂家、合作伙伴和开发者,旨在提供一个详细的接口规范,以便这些群体能够有效地集成和利用该系统的功能。这份文档由浙江大华技术股份有限...

    JAVA与WORD接口jacob_1.9

    3. Readme文件:提供了关于如何使用Jacob的指南和注意事项,包括安装步骤、配置环境变量以及示例代码。 4. 纠错日志:可能包含错误报告或已知问题的解决方案,对于排查问题和优化使用非常有帮助。 使用Jacob进行...

    远程控制系统接口,vc用例

    4. 文档:详细说明了每个函数的作用、参数、返回值以及使用注意事项。 在VC中,我们首先需要包含SDK的头文件,然后实例化SDK提供的类,设置必要的配置,如服务器地址、端口、认证信息等。接着,我们可以通过调用SDK...

    组态王对外开放的接口,目前组态王中的手机客户端功能通过该接口获取组态王中的实时数据

    其对外开放的接口是实现与其他系统交互的重要方式,特别是在移动设备应用上,用户可以通过手机客户端获取组态王中的实时数据,进行远程监控和管理。 这个接口的核心组件是KvRtAPI.dll,这是一个动态链接库(DLL)...

    如何设计一个安全对外的API接口?DES RSA加密算法代码

    在实际开发中,需要注意以下几点: 1. 使用最新的加密标准:虽然DES已过时,但3DES和更现代的AES(Advanced Encryption Standard)应该优先考虑。 2. 避免硬编码密钥:密钥应存储在安全的位置,如操作系统安全存储或...

    patch_NC65restful接口_20180629_dingyh5.zip

    4. **readme.txt**:这是开发者或系统管理员的指南,通常会包含详细的安装步骤、使用注意事项以及可能出现的问题和解决办法。 通过解压并按照readme.txt的指示操作,可以将新的RESTful接口集成到NC65系统中,从而...

    SPI接口原理图1

    OLED显示屏的0.42寸模块对外接口电路采用SPI通信。在电路设计中,要注意电容的使用,如C1、C3、C4、C5等,它们起到滤波和稳定电源的作用。而电阻如R1、R4、R5等用于接口切换和信号匹配。 总结起来,STM32通过SPI或I...

    携程机票代理商API接口开发文档

    ### 携程机票代理商API接口开发文档 #### 1. 前言 ##### 1.1 功能描述 为了更好地支持业务需求并提供高效的服务体验,...同时,在实际应用中还需注意遵循携程提供的安全规定和技术标准,确保数据的安全传输与处理。

    机动车检验监管系统接口使用手册V4.90(设备厂家)实用.doc

    机动车检验监管系统接口使用手册V4.90(设备厂家)实用是设备厂家使用机动车检验监管系统的重要参考资料,涵盖了机动车检验监管系统的接口调用规范、XML 文件格式定义、对外接口说明等多个方面的知识点。

    AzkabanAPI接口文档汇总

    - **注意**: 此功能已被废弃,请考虑使用`Flexible scheduling using Cron`接口。 --- ##### 12. Flexible Scheduling Using Cron 使用Cron进行灵活调度 - **方法**: POST - **请求URL**: `/scheduler` - **...

Global site tag (gtag.js) - Google Analytics