如何正确合理的设计一个接口项目

首先,我这里说明接口,不是代码里的接口,而是接口项目,如果想错了就不用往下看了。

在手机广泛流行的今天,手机应用也随之越来越多,而且成长的速度也非常快。手机应用软件开发实现方式同普通PC软件一样,也分为BS和CS方式。而采用CS方式,在服务器端大多采用接口的形式提供数据交互(主流数据交互方式有:Json、WebService等),今天要说的就是如何设计接口。

接口作为连通客户端与数据库进行数据流通的桥梁,起着举足轻重的作用,直接影响着程序的效率性、稳定性、可靠性以及数据的正确性、完整性。客户端注重的是界面美观,操作方便顺畅,是用户最直接的感受体验,而接口则是所有数据的提供者,是用户深层的内涵体验。

因次,设计接口在一个项目中,是非常重要的。那么我就目前的经验总结下如何合理设计接口。

一、 设计原理

1. 深入了解需求

除了设计数据库的人最了解需求外,其次就是设计接口的人了,甚至有时接口开发人员还要参与到数据库设计中。从“客户端-接口-数据库”的层次上看,接口明显扮演着承上启下的角色,一方面要明白接口要什么数据,另一方面要考虑如何从数据库获取、组织数据。所以如果不了解需求,你就无法正确抽象对象来组织数据给客户端,也无法验证数据库的数据结构能否满足需求。数据库设计者要了解需求中的数据结构,而接口则更多的要了解需求中的逻辑结构以及由此衍生出的逻辑数据结构。

2. 了解数据库结构

既然接口要明白如何从数据库获取、组织数据,就当然要了解数据库结构啦。

3. 了解客户端原型

了解原型,其实更多是为了帮助你设计接口时需要提供的数据和结构。但有时当你设计时并没有原型,所以此条并不是必须要求的。但假如设计完接口后原型出来了,我们也可以拿原型还验证接口设计是否正确、合理。

二、设计原则

1. 充分理由

不是随便一个功能就要有个接口,也不是随便一个需求就要加个接口。每新建一个接口,就要有充分的理由和考虑,即这个接口的存在是十分有意义额价值的,无意义的接口不仅增加了维护的难度,更重要是对于程序的可控性的大大降低,接口也会十分臃肿。因此我放在了第一条。

2. 职责明确

一个接口只负责一个业务功能,它与设计模式里的职责单一原则类似但却不同,因为一个业务功能里可能会包含多个操作,比如查询会员,可能除了查询会员表外还要获取该会员的其他必要信息,但不要在查询会员的同时还有修改权限等类似的其他业务功能,应该分成两个接口还做。

3. 高内聚低耦合

一个接口要包含完整的业务功能,而不同接口之间的业务关联要尽可能的小。还是查询会员的例子,有时查询会员的同时,可能该会员的相关信息要随之发生变化(如状态),如果这时一条完整的业务流水线,那么就应该在一个接口里完成,而不应再单独设立接口去操作完成。就是说一个接口不应该随着另一个变化而变化或以某几个接口为前提而存在。

4. 分析角度明确

设计接口分析的角度要统一明确。否则会造成接口结构的混乱。例如,不要一会以角色的角度设计,一会儿就要以功能的角度设计。

5. 入参格式统一

所有接口的参数格式要求及风格要统一,不要一个接口参数是逗号分隔,另一个就是数组;不要一个接口日期参数是x年x月x日风格,另一个就是x-x-x。

6. 状态及消息

提供必要的接口调用状态信息。调用是否成功?如果失败,那么失败的原因是什么。这些必要的信息必须要告诉给客户端。

7. 控制数据量

一个接口返回不应该包含过多的数据量,过多的数据量不仅处理复杂,对数据传输的压力也非常大,会导致客户端反应缓慢。过多的数据量很多时候都是接口划分不明确。

8. 禁止随意拓展参数

与第1条类似,只不过是针对参数而言了。日后拓展接口可能是难以避免的,但是不要随意就加参数,加参数一定是必要且有意义的,需求改变前首先应考虑现有接口内部维护是否能满足需求,而不要通过加个参数来方便自己实现需求的难度,因为参数的更变会直接导致客户端调用的变化,容易产生版本兼容性问题。

三、设计方法

1. 抽象业务

相比抽象对象而言,抽象业务更宏观,我觉得相对也容易一些,但抽象尺度往往不太好把握。

2. 数据格式

接口定义的数据格式必须都经过充分考虑,否则会出现数据转换失败或超出长度等错误。如果无法确定,直接设置成字符串是最合适的。

3. 有意义的命名

无论是接口还是参数,名称都应该是有意义的,让人能看明白的。

 

总之,接口设计是一个细致的工作,设计时也会有很多矛盾,但个人倾向于粗粒度设计方向(即内聚性更高一些),这样不仅给客户端浏览接口方便明确,维护也轻松些,这么做的缺点就是某一接口扩展时不是很灵活,但可以通过重新定义一个接口来弥补,但正如上所说,新增接口还是要三思而后行的。以上很多虽然都是理论性讲解,但牢牢记住这些,并结合实际工作,就会慢慢深刻的体会到其中的含义。即理论指导实践,实践来验证理论。

  • 18
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Pytest是一个用于接口自动化测试的框架,它可以帮助您编写和组织测试,并提供一些有用的特性,如支持多种断言库、支持并行测试、提供丰富的报告等。 在设计Pytest接口自动化框架时,需要考虑以下几点: 1. 易用性:Pytest的语法简单易懂,易于编写和维护测试用例。 2. 可扩展性:Pytest支持插件机制,可以根据需要扩展其功能。 3. 可读性:Pytest报告中提供了详细的错误信息,方便定位问题。 4. 并行测试:Pytest支持并行测试,可以提高测试效率。 5. 支持多种断言库:Pytest支持多种断言库,如assert语句、基于内置库unittest的断言方法等。 通过考虑以上几点,可以设计一个功能强大、易用性高的Pytest接口自动化框架。 ### 回答2: pytest接口自动化框架是一种用于编写、执行和管理接口自动化测试的开源测试框架。它基于Python语言,提供了丰富的功能和灵活的设计,使得接口测试变得简单、可维护和可扩展。 pytest的设计思想是"简单即美",它采用了直观的语法和简洁的规范,使得测试用例的编写变得简单易懂。通过使用pytest,我们可以使用简单的装饰器、断言和参数化等功能来编写清晰和可读性强的测试代码。 pytest框架还提供了丰富的插件生态系统,使得我们能够针对实际的测试需求灵活地扩展功能。例如,可以使用插件来生成测试报告、集成持续集成工具、通过参数化实现数据驱动等。这样,我们可以根据项目的需求选择并集成适合的插件,从而使得测试框架更加强大和易于扩展。 此外,pytest框架还支持并行执行测试用例、分布式测试、失败重试等特性,这些功能能够提高测试执行效率和稳定性。同时,其良好的Pytest的集成能力让我们能够简单地与其他工具(如Selenium、Appium等)进行集成,从而实现更全面的测试覆盖。 总而言之,pytest接口自动化框架设计简单易用,具有灵活扩展的特点,并且提供了丰富的特性和插件生态系统。这使得我们能够高效地编写、执行和管理接口自动化测试,从而提高软件质量和加速交付。 ### 回答3: pytest是一种简洁、可扩展且易于使用的Python测试框架,适用于各种类型的测试,包括接口自动化测试。以下是关于如何设计一个pytest接口自动化测试框架的一些建议。 1.项目结构:对于一个pytest接口自动化测试框架,建议按照功能模块或测试类别对测试用例进行组织并进行结构化管理。项目结构应该清晰,易于维护和扩展。 2.配置管理:使用pytest的配置文件pytest.ini或conftest.py来管理框架的配置信息,例如API地址、登录信息、数据库连接等。这样可以方便地配置不同环境下的接口测试。 3.用例设计和管理:用pytest的装饰器标记测试类和方法,例如@pytest.mark.parametrize、@pytest.mark.parametrize、@pytest.mark.skip等。此外,可以使用pytest的fixture机制来共享测试数据、测试环境等。 4.测试报告:pytest提供丰富的插件来生成美观的测试报告,如pytest-html、pytest-allure等。测试报告可以包含测试用例的执行结果、错误信息、日志、失败截图等,便于结果分析和问题定位。 5.异常处理:在接口自动化测试中,经常会遇到异常情况,如接口超时、响应错误等。可以使用pytest的try..except..finally来处理这些异常,并对异常进行记录和处理,以保证测试脚本的健壮性和稳定性。 6.数据管理:在接口自动化测试中,往往需要准备测试数据、验证响应数据等。可以使用pytest的参数化机制来管理测试数据,例如使用CSV、Excel或JSON文件来存储和读取测试数据。 7.断言机制:pytest提供了丰富的断言函数来判断测试结果是否符合预期,如assert、assertEqual、assertTrue等。可以根据接口的返回值进行断言,以验证接口功能是否正确。 总之,设计一个pytest接口自动化测试框架需要考虑项目结构、配置管理、用例设计、测试报告、异常处理、数据管理和断言机制等。合理使用pytest的功能和插件,能够提高测试效率、降低测试成本,并且易于维护和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值