在现代Web开发中,RESTful API扮演着至关重要的角色。它们提供了一种轻量级、易于理解和使用的接口,使得客户端能够与服务器进行交互。然而,测试这些API接口并非总是一件容易的事情。本文将介绍一种新的工具,它旨在简化RESTful API的测试过程,特别是对于那些需要通过URI传递参数的方法。
在之前的一篇文章中,讨论了如何使用通用工具来轻松测试REST方法。通过将URI中传递的参数纳入服务器的路由属性,可以简化测试过程。例如,通过在控制器方法上使用路由属性,可以定义如下的路由:
C# [Route("api/DeliveryItems/{serialNum}/{ID:int}/{CountToFetch:int}")]...
客户端可以通过如下URI访问该方法:
C# http://<serverName>:<portNum>/api/<ControllerName>/<serialNumVal>/<IDVal>/<CountToFetchVal>
这种设计虽然有效,但它将路径/路由信息(例如"http://<serverName>:<portNum>/api/<ControllerName>")与方法参数(例如"<serialNumVal>/<IDVal>/<CountToFetchVal>")混合在一起,这可能会导致一些混淆。
为了解决这个问题,设计了一种新的工具,它允许测试具有不同路由属性的方法。例如,可以将方法定义为:
C# [Route("api/DeliveryItems")]...
而方法本身保持不变:
C# public IEnumerable<deliveryitem> GetRangeOfDeliveryItemsByStartingID(string serialNum, int ID, int CountToFetch) { return _deliveryItemRepository.GetRange(serialNum, ID, CountToFetch); }
现在,客户端可以通过如下方式调用该方法:
C# http://<serverName>:<portNum>/api/<ControllerName>/[<Differentiator>]/?<arg1Name>=<arg1Val>&<arg2Name>=<arg2Val> (etc.)
例如:
C# http://localhost:28642/api/deliveries?serialNum=dplatypus&ID=1&CountToFetch=42
或者,如果存在"differentiator"(用于解决任何可能的歧义的方法名):
C# http://localhost:28642/api/deliveries/getThemThangs?serialNum=dplatypus&ID=1&CountToFetch=42
要使用新的Web API REST测试工具,请按照以下步骤操作:
0) 在"Enter Base URI"文本框中输入"base uri",例如"http://localhost:28642/api/"。
1) 如果将值保存到文本文件中,可以通过"Load URI Strings From File"按钮加载。
2) 从组合框中选择一个值。
3) 点击"3) Discover URI Strings Args"按钮。这将显示一个相应的标签和文本框,可以在其中输入每个参数的值。
4) 为每个发现的参数输入值:
5) 点击"5) (Re)Build URI"按钮。它将构建要传递给服务器的URI,用在文本框中输入的值替换占位符值,并在"5) (Re)Build URI"按钮右侧的文本框中显示。
6) 服务器运行时,作为最后一步,点击"6) Test the URI"按钮。如果代码正确,并且极地没有突然颠倒,也没有发生巨大的电磁风暴,将看到结果在下面的DataGridView中显示。
新工具的实现涉及到几个关键的技术点,包括但不限于:
这些技术点的实现细节将在后续的文章中详细讨论。