需求:
近期刚刚完成Nginx 版本的 TFS (Taobao FileSystem) Restful 接口测试工作,借此契机总结分享以下3点:
1. Restufl简介;2. TFS Restful接口设计思路; 3. TFS Restful接口开发过程中容易出现的bug分析(重点介绍)
解决方案:
1. Restful简介:
Restful的一个思想就是充分利用http的特性,将资源独立出来,并对资源可以有各种操作。比如http标准的get/put/delete/post/header/option等。
一般来说,get/put/delete是等幂的操作,也就是说,相同的多次操作,原则上是不应该影响到最终结果的。而post则多用于添加一个新的资源,是一个不等幂的操作,多次重复操作,产生的最终效果会不一致,比如可能会创建了多个资源,这个现象在我们在提交浏览器表单请求的时候可以看到,重复提交,浏览器会有提示的。
Get操作的原则是不会改变数据的本身,它不应该做对数据的修改等操作。
Put则仅仅是对数据做更新操作。
Delete则仅仅是删除数据的操作了。
所以,可以看出,restful接口对资源和操作有一个很清晰的定义与界限。
2. TFS Restful接口设计思路:
对TFS来说,他是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据。而数据就是一种资源,在对该资源进行适当的分类之后(分为原生TFS文件名和自定义TFS文件名),那对这个资源就可以进行各种不同的操作。 在此将各种不同的操作分为以下2类:
第一类:增删改查操作:
写文件:可以用Post操作来实现,如:POST /v1/appkey HTTP/1.1。 其中v1表示为原生TFS文件名资源,appkey表示所操作的应用(每个不同的应用具有不同的操作权限和优先级别);操作成功后将返回Status 200 OK及resposne body内包含的文件名;若操作失败,将返回相应错误信息的Status状态码,如400 Bad Request, 500 Internal Server Error等信息,便于使用人员debug问题。
读文件:可以用Get操作来实现,如: GET /v1/appkey/TfsFileName HTTP/1.1。 其中TfsFileName表示所需要读取的文件名;操作成功后将返回Status 200 OK及response body内包含所要获取的文件内容;若操作失败,将返回相应错误信息的Status状态码,如400, 500和404 Not Found等信息。
删文件:可以用Delete操作来实现,如:DELETE /v1/appkey/TfsFileName HTTP/1.1。 操作成功后将返回Status 200 OK 无需返回response body信息;若操作失败,依然返回错误信息的Status状态码。
获取文件元信息: 元信息指数据的一些基本信息,如存放位置、文件大小、当前状态(删除、隐藏等)等信息,依然可以通过Get操作来实现,如: GET /v1/appkey/metadata/TfsFileName HTTP/1.1。 在url中增加metadata字段,以此来区分是否读取文件的元信息。操作成功后将返回Status 200 OK及response body内包含文件的元信息数据;若操作失败则返回错误信息的Status状态码。
第二类:由于TFS本身的特性,因此会有像指定suffix/delete/hide/offset/size等更多操作。可以将这些控制信息放到url的args里面。如: GET /v1/appkey/TfsFileName?suffix=.jpg&offset=6&size=2012 HTTP/1.1。 之后通过Nginx对请求的解析信息来做后续的数据库请求逻辑处理。
3. TFS Restful接口开发过程中容易出现的bug分析
将TFS Restful接口开发过程容易出现的bug分为以下4类:
1. TFS Restful 与 后端数据库TFS 之间的TCP通讯:
a. TFS Restful 在处理读、写请求完成之后不关闭与客户端的连接,导致大量TCP连接处于Close_Wati状态,无法释放连接,最终导致连接数耗尽 ;这是由于TFS Restful在完成处理请求并接收到Client端返回的FIN数据包后,未返回FIN数据包,单方面hold住了TCP连接;
b. TFS Restful 未能正确处理后端TFS响应超时问题;这是由于后端TFS由于网络堵塞等问题,无法在正常时间内返回响应,而TFS Restful所设置的超时处理不生效,导致TFS Restful hold。
2. TFS Restful内部数据存储:
a. TFS Restful 在集群间重试的时候没有修改对应的接收buf;
b. TFS Restful获取不到 所需删除的物理集群地址;
c. TFS Restful 分配tfs_module_rcs_zone 内存时出错;
这是由于TFS是分布式数据库,涉及多集群处理,因此TFS Restful在各个集群之间获取信息时,需要修改相对应的接收buf,否则将导致数据不正确。
3. TFS Restful控制信息处理不正确:
a. TFS Resultful size测试设置为0是没有返回badrequest,
而是出现访问异常:read
timeout;
b. TFS Restful 读文件请求offset等于文件大小时read timeout ;
这是由于TFS Restful对控制信息的处理不正确,导致读取TFS集群失败;
4. TFS Restful对返回错误信息处理不正确:
a. TFS Restful 选择集群失败时返回500而不是404;
b. TFS resultful 读取文件时Response没有返回content-type和accpet-ranges头信息 ;
c. TFS resultful 读取不存在的block信息时,返回的error
code不正确 ;
d. TFS Resultful 查询元信息时请求uri没有设置appkey时返回error code不正确 ;
这是由于TFS Restful response信息设置不正确所导致的。
OK, TFS Restful 接口测试总结分享介绍完毕,欢迎拍砖。转发请备注转自:100continue.iteye.com。 谢谢。
分享到:
相关推荐
Restful接口测试工作,借此契机总结分享以下3点:1、Restufl简介;2、TFSRestful接口设计思路;3、TFS Restful接口开发过程中容易出现的bug分析(重点介绍)解决方案:1、Restful简介:Restful的一个思想就是充分...
- **RESTful服务测试**:RESTful架构已经成为现代Web服务的标准设计模式之一,UFT提供了对RESTful服务的支持,可以轻松创建和管理RESTful接口测试用例。 - **JSON/XML数据格式处理**:API测试经常涉及到JSON或XML...
这些操作通常通过HTTP或TCP协议完成,利用TFS的RESTful接口。 3. **元数据管理**:TFS支持文件的元数据存储,如文件大小、创建时间等。API提供了获取和修改元数据的方法。 4. **分块上传**:对于大文件,TFS支持...
- 安装Nginx,并对其进行配置以支持TFS的RESTful风格接口。 - 调整Nginx配置文件,添加TFS相关模块。 - 最后进行Nginx的编译和安装。 **3. 注意事项** - 在配置过程中需要注意IP地址和端口号的正确性。 - 确保...
【TFS:通过REST接口驱动TFS 2015+的Powershell模块】是一个专注于利用RESTful API与PowerShell结合,实现对Team Foundation Server(TFS)2015及更高版本进行自动化操作的技术主题。在现代的DevOps环境中,这样的...
总的来说,RegPreciseREST 通过 RESTful API 提供了一个强大且易用的接口,使得研究人员能够无缝地集成 RegPrecise 数据库中的丰富信息,进一步推动生物学研究的进步。在 Java 开发环境中,利用 Spring Boot 等工具...
6. **WCF服务或Web API**:如果系统需要与其他应用或移动设备集成,可能会使用Windows Communication Foundation (WCF)服务或ASP.NET Web API,提供RESTful接口进行数据交换。 7. **异常处理与日志记录**:为了确保...
7. **WebAPI或WCF服务**:为了实现全国范围内的数据交换和移动设备接入,系统可能利用ASP.NET的WebAPI或WCF服务技术,创建RESTful接口,使客户端(如手机APP)能方便地调用服务器端的业务逻辑。 8. **部署与配置**...
14. **单元测试和持续集成**:介绍如何使用诸如NUnit和TFS等工具进行测试和自动化构建。 该压缩包中包含的"用前必读.txt"可能提供了关于文档使用的一些提示和注意事项,例如阅读顺序、查找特定主题的方法等。而"Asp...
同时,ASP.NET Web API用于构建RESTful服务,为移动和Web应用提供数据接口。 对于桌面应用,WPF(Windows Presentation Foundation)是C#开发现代Windows应用的首选,它提供了丰富的UI设计工具和强大的数据绑定功能...
12. **单元测试和持续集成**:了解如何编写单元测试来验证代码质量,以及使用工具如TFS或Jenkins实现持续集成和持续部署。 通过本书的学习,读者将能够运用ASP.NET的高级特性,设计和开发高效、安全、可扩展的Web...
使用 NUnit、Moq 或其他测试框架进行单元测试,结合 Jenkins、TFS 等工具实现持续集成,是确保代码质量和项目进度的有效手段。 这个"ASP.NET密技集(c#)"可能包含了上述部分或全部主题的详细讲解,以及一些实战案例...
在压缩包中的代码框架可能包括了类、对象、接口、继承、多态等核心概念的示例。 2. **MVC架构**:Model-View-Controller是Web开发中常用的一种设计模式,VS2015提供了内置支持。代码框架可能包含了创建MVC项目、...
ASP.NET提供了诸如 MSTest 和 NUnit 这样的测试框架,以及与TFS或VSTS的集成,助力自动化测试和构建流程。 通过学习《ASP.NET Web 程序设计》这本书,开发者能够掌握ASP.NET的核心技术和最佳实践,从而具备创建高效...
10. **API接口**:系统可能还包含RESTful API设计,供其他应用或服务调用,实现数据的共享和交互。 综上所述,这个ASP.NET毕业设计选题系统网站涵盖了Web开发的多个重要方面,包括但不限于架构设计、数据库交互、...
6. **WebAPI或WCF**:如果系统包含Web服务接口,可能会使用ASP.NET WebAPI或Windows Communication Foundation(WCF)来创建和暴露RESTful服务,实现物资管理功能的远程调用。 7. **Bootstrap或CSS**:前端界面可能...
Web API则专为构建RESTful服务而设计,便于创建数据接口供其他应用或客户端使用。 在Windows操作系统上,开发ASP.NET应用通常使用Visual Studio IDE,这是一款功能强大的集成开发环境,集成了代码编辑、调试、版本...
14. **单元测试和持续集成**:使用NUnit、MSTest或xUnit进行单元测试,以及TFS、Jenkins等工具进行持续集成,确保代码质量。 15. **响应式设计**:随着移动设备的普及,响应式设计确保ASP.NET应用在不同设备上都能...