50 RESTful Web Services(14):分解任务与Setup测试
你好,我是徐昊。今天我们继续使用TDD的方式实现RESTful Web Services。
回顾架构愿景与任务列表
目前我们的架构愿景如下:
目前的任务列表为(仅列出与当前相关的模块),这里的列表我们合并了从ResourceServlet发现的需求,以及在第40讲中分解的任务:
-
ResourceRouter
-
在处理请求派分时,可以支持多级子资源(Sub-Resource)
- 在处理请求派分时,可以根据客户端提供的超媒体类型,选择对应的资源方法(Resource Method)
- 在处理请求派分时,可以根据客户端提供的Http方法,选择对应的资源方法
- 资源方法可以返回Java对象,由Runtime自行推断正确的返回状态
- 资源方法可以不明确指定返回的超媒体类型,由Runtime自行推断,比如,资源方法标注了Produces标注,那么就使用标注提供的超媒体类型等
- 资源方法可按找期望的类型,访问Http请求的内容
- 资源对象和资源方法可接受环境组件的注入
- 将Resource Method的返回值包装为Response对象
继续细化任务列表,根据架构愿景,分配到不同的模块:
-
ResourceRouter
-
将Resource Method的返回值包装为Response对象
- 根据与Path匹配结果,降序排列RootResource,选择第一个的RootResource
- 如果没有匹配的RootResource,则构造404的Response
- 如果返回的RootResource中无法匹配剩余Path,则构造404的Response
- 如果ResourceMethod返回null,则构造204的Response
- Resource/RootResource/ResourceMethod
-
在处理请求派分时,可以支持多级子资源(Sub-Resource)
- 在处理请求派分时,可以根据客户端提供的超媒体类型,选择对应的资源方法(Resource Method)
- 在处理请求派分时,可以根据客户端提供的Http方法,选择对应的资源方法
- 资源方法可以返回Java对象,由Runtime自行推断正确的返回状态
- 资源方法可以不明确指定返回的超媒体类型,由Runtime自行推断,比如,资源方法标注了Produces标注,那么就使用标注提供的超媒体类型等
- 资源方法可按找期望的类型,访问Http请求的内容
- 资源对象和资源方法可接受环境组件的注入
可以看到在当前架构愿景下,原本设计的需求被分入了Resource/RootResource/ResourceMethod模块中。
视频演示
下面进入今日的开发:
思考题
完成后的代码里其实是有一点问题的,请问问题出在哪儿?
欢迎把你的想法分享在留言区,也欢迎把你的项目代码分享出来。相信经过你的思考与实操,学习效果会更好!
精选留言(1)
- 忘川 👍(1) 💬(0)
应该是关注点太多了,前面准备上下文替身数据的准备过程复杂,会造成理解难度,而且制造这么多的测试数据,没有整理,对于后面的测试来说,不能复用,挺可惜的.
2023-01-08