在 RESTful API 中解析 URI 参数

Posted

技术标签:

【中文标题】在 RESTful API 中解析 URI 参数【英文标题】:Parsing URI parameters in a RESTful API 【发布时间】:2017-09-06 04:12:33 【问题描述】:

我应该如何在 REST API 中解析 URI 参数。例如:

http://api.example.com/item/ [ItemID [/Property]]

以下请求都应该是有效的:

http://api.example.com/item
http://api.example.com/item/
http://api.example.com/item/1
http://api.example.com/item/1/
http://api.example.com/item/1/description
http://api.example.com/item/1/description/

我需要能够获取 ItemID 和 Property 值(如果存在)。

我尝试使用 Apache Commons StringUtils 和 substringBefore/substringAfter,但很快事情就变得混乱了。是否有此类任务的库,或者我忽略的其他方式?

【问题讨论】:

有没有办法关闭java语法高亮? 【参考方案1】:

如果您使用的是 JAX-RS,则可以执行类似的操作

@GET
@Path("/param1/param2")
@Produces("text/plain")

public String get(@PathParam("param1") int param1, @PathParam("param2") int param2) 

    logger.debug("\n param1 = " + param1 + " .. param2 = " + param2);

【讨论】:

目前我只使用 Servlet 3.0 API,但如果需要,我将切换到 JAX-RS【参考方案2】:

我非常感谢@Jagdeep 的回答,但由于我没有使用 JAX-RS,所以我无法使用它。在做了一些研究之后,很明显没有任何库可以做到这一点,所以我决定创建自己的。它非常粗糙,到目前为止还没有文档。不过,我会尽快更新。欢迎您向我提交拉取请求,并进行改进。

https://github.com/ArjMart/UrlParser

用法:

UrlParser parser = new Parser();
parser.setTemplate("/item/INT:itemID/STRING:itemAttribute");
UrlParametersMap upm = parser.parse(request.getURI());
boolean attributeExists = upm.parameterExists("itemAttribute");
String attribute = null;
if(attributeExists)
  attribute = upm.getString("itemAttribute");

免责声明: 我(显然)隶属于 UrlParser,因为我是它的唯一创建者和贡献者。

【讨论】:

@OscarPerez 哦。我没看到 :) 好吧,我猜这就是竞争的产生方式...... 确实!越多越好:)

以上是关于在 RESTful API 中解析 URI 参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将参数解析为 RESTful API

RESTful API - URI 结构建议

RESTful API:在请求正文中而不是在 URI 中传递父资源定位器是不是更实用?

RESTful API 概述

通俗易懂的RESTful API实践详解(含代码)

RESTful API URI 设计