我有http路径和方法的列表。例如:
GET /spaceshuttles/{id}
POST /{version}/order
根据我的理解,当有传入请求时,迭代地比较这些路径,在第一场比赛时停止。 我的问题是 - 这是否有性能影响?如果有一个服务处理1000个传入路由,那么性能会受到多大影响呢?
即使点击量很小,是否有一个干净的策略来匹配URL与树/特里匹配策略?如果是,那又怎样? 例如: 我希望将传入的URL与其中一个匹配,而不需要迭代匹配。 例如:对于 GET / spaceshuttles / 46 ,我应该获得 GET / spaceshuttles / {id}
的句柄我需要这个用于我的网络应用过滤器,其中一些网址得到特殊处理。 目前我正在通过迭代我的列表进行匹配。我假设必须有一些库以高效的方式执行此操作。
答案 0 :(得分:0)
我没有考虑到符合您需求的图书馆。我会选择一个自定义类RequestMatcher
,使用Http方法保存正则表达式模式和Http方法或字符串:
class RequestMatcher {
private Pattern urlPattern;
private String httpMethod;
public RequestMatcher(final String urlPattern, final String httpMethod) {
this.urlPattern = Pattern.compile(urlPattern);
this.httpMethod = httpMethod;
}
public boolean matches(final String url, final String httpMethod) {
return httpMethod.equals(this.httpMethod) && this.urlPattern.matcher(url).matches();
}
在您的过滤器中,您可以像这样使用它:
final RequestMatcher spaceShuttleMatcher = new RequestMatcher("/spaceshuttles/[0-9]+", "GET");
final RequestMatcher orderMatcher = new RequestMatcher("/[0-9]+\\.[0-9]+\\.[0-9]+/order", "POST");
boolean isSpaceShuttleRequest = spaceShuttleMatcher.matches("/spaceshuttles/123", "GET");
boolean isOrderMatcher = orderMatcher.matches("/1.2.3/order", "POST");