您的位置:首页 > 其它

RestFul Api 定义流程规范

2014-12-26 17:47 183 查看
(1)整理项目需求,编写Api需求文档,包括Api返回结果,查询参数等等。

(2)定义RestFul Api接口。

(3)测试RestFul Api接口。

(4)编写Api说明文档,包括Api的名称,路径,Http方法,请求参数,功能模板,返回结果等等,方便各模块研发人员和测试人员使用。

(5)测试人员测试Api,主要测试系统性能,还有一些特出场景测试,例如多线程,并发操作。编写Api测试报告

(6)Api接口调用,项目研发阶段。

备注:上述5和6可以同时进行,互不影响。主要产生三个Api文档:需求文档,说明文档,测试文档。

这里我总结一下2和3定义和测试RestFul api的一些经验,有疑问或者补充的地方请大家不吝赐教!

一:RestFul api定义

(1)Url只能有名词

之前在项目中定义Api,犯了一个很严重的问题。没有遵守RestFul规范,Api资源路径中还有大量的动词。

在RESTful架构中,每个url代表一种资源(resource),所以Url不能有动词,只能有名词。

(2)单数名词表示单个资源,复数名词表示所有资源。

例如:获取产品的API可以这样定义

获取单个产品:http://127.0.01:8080/AppName/rest/product/1

获取多个产品: http://127.0.01:8080/AppName/rest/products
(3)使用子资源表达关系

如果一个资源与另外一个资源有关系,使用子资源:
/product/1/images/ 返回id=1的产品的所有图片
/product/1/image/1
返回id=1的产品的其中一个图片
(4)URL参数
情况1:http://127.0.01:8080/AppName/rest/product/1
URL最后的1就是参数,表示获取id=1的产品,则在api定义的时候1作为PathParam
@GET
@Path("/{productId}")
@Produces("application/json;charset=utf-8")

public Response editUser(@PathParam("productId") longproductId)

情况2:资源上传
前台部分:@FormDataParam表单参数



情况3:post提交对象参数,添加或者编辑对象

Api定义:



(5)选择Http方法

常用的HTTP动词有下面四个(括号里是对应的SQL命令)。

GET(SELECT):从服务器取出资源(一项或多项)。

POST(CREATE):在服务器新建一个资源。

PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。

DELETE(DELETE):从服务器删除资源。

之前在项目中定义的Api,在选择Http方法上,也存在不足。例如用Post也实现更新资源或者删除资源。虽然在功能实现上没有什么问题,但是不够规范,Api定义显得杂乱。

二:RestFul Api测试

定义了RestFul Api,必须先做单元测试,确保Api可用,然后再交给别人去调用,这样才能确保工作进度。下面我就说说我测试Api的几种方法,具体怎么测试这里不做详细描述。

(1)使用Apache的jmeter测试工具,很方便,可以批量测试Api,

(2) 使用JerseyClient写测试程序。因为我们用的是jersey实现的RestFul。

(3) 使用浏览器插件工具,我用的是火狐的插件RESTClient

(4)使用curl命令行工具。

使用工具测试Api,GET方法还好,如果是POST方法需要指定方法的Headers(数据格式),Body(请求参数),Api的url。

Body请求参数,如何获取呢,在这里我使用了Gson,先用java组织参数对象,然后用Gson将参数对象转化为json串。

Gson gson = new Gson();

String wqtString = gson.toJson(wqt);

System.out.println(wqtString)

举例说明:

我们框架中封装了一个查询参数WebQueryTerm。我获取到它的json串格式为:

{"page":{"number":1,"size":10,"total":0,"sorts":[{"field":"creationTime","type":"DESC"}]},"terms":[{"field":"appType","operator":"equal","value":"0"}]}

其中

page表示分页属性。number当前页,size一页显示多少条数据,

sorts排序:field表示排序字段。type表示排序类型,是desc降序还是asc升序

terms表示查询。field表示查询字段;operator表示是模糊查询Like还是精确查询Equal,value表示你输入的查询值。

这里简单说一下,怎么使用火狐的RESTClient。

(1)首先,在火狐浏览器菜单-附件组件-插件,中搜索RESTClient,并安装

(2)打开RESTClient,点击菜单Headers。输入自定义Request Headers。例如Name = Content-Type Value=application/json 点击okay!

(3)选择Method,我选择Post,因为我测试获取应用列表,带分页,带查询条件。

(4)输入api资源的url:http://192.168.1.183:8080/osd/rest/app/apps

(5)输入上面的请求参数json串。

(6)点击Send请求API。

结果查看:Response Headers如果Status Code =200 ok则表明API没有异常

再看Response Body返回数据,是否满足你的要求。测试工作完成!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: