我正在尝试使用 springMVC
构建一个 Restful 风格的 API .
当为 springMVC 的 DispatcherServlet
配置 url-pattern 时,似乎有 2 个选择,我需要一些建议。
选项A:
配置模式为:<url-pattern>*.action</url-pattern>
和操作使用类似 @RequestMapping("/role/add.action")
的路径
选项B:
配置模式为:<url-pattern>/api/*</url-pattern>
和操作使用类似 @RequestMapping("/api/role/add")
的路径
我更喜欢使用没有后缀的样式,但在那种情况下我需要添加一个子路径。
但我不确定在作为后端提供restful API的项目中使用哪个更合适,以浏览器/IOS/Android作为其客户端。
可能有选项C,但我不确定:
配置模式为:<url-pattern>/*</url-pattern>
和操作使用类似 @RequestMapping("/role/add")
的路径
在这种情况下,内置的 servlet 将被覆盖,例如 jsp 将无法正常工作。
但我没有任何 jsp
,还有像 html / js / css / image / document / music / video
这样的静态资源都放在由 nginx
服务的另一个端口或服务器上,请求tomcat只通过json数据提供ajax服务。
那么在这种情况下使用选项 C 是否合适,或者它有一些不良的副作用?
请您参考如下方法:
如果您的目标是 restful api,我的选择是第二个,因为您在 url 中标识了资源;假设你必须管理一个角色资源,你应该有一些像这样的映射:
@RequestMapping("/api/role" method = RequestMethod.POST)
插入一个新角色(可能是api不允许这样做)
@RequestMapping("/api/role/{roleId}" method = RequestMethod.PUT)
更新现有角色
@RequestMapping("/api/role/{roleId}" method = RequestMethod.DELETE)
删除角色
@RequestMapping("/api/role" method = RequestMethod.GET)
检索角色(您可以通过查询字符串实现一些过滤器)
这同样适用于其他资源(用户等),命名模式相同。
我会避免选项 C,因为我认为如果您的应用程序还提供不使用该 API 的 Web 界面,那么最好为该 API 设置一个专用映射