繁体   English   中英

如何将REST请求的参数传递给Java方法?

[英]How to pass parameters for REST request to Java method?

我们正在构建Java SDK以简化对提供REST API的服务的访问。 此SDK将由第三方开发人员使用。

其中一个问题是找到一种表示每个请求的可选参数的好方法。

假设我们有其余的端点: GET /photos ,它有几个可选参数: sortBypageSizepageNumber等。

一种解决方案是接受Map<String,String>作为表示该休息调用的api方法的参数。

interface RestService {   
    public List<Photo> getPhotos(Map<String,String> parameters);
}

这个解决方案有几个问题:

  • 该方法的签名不向开发人员提供有关此方法可用的可选参数名称的信息(以及有效值)。 他需要查阅REST api文档,理想情况下我们希望避免使用。
  • 开发人员最终会创建几个Map,其中包含他将调用的方法的参数,硬编码参数的名称和值。 这意味着如果它们发生变化,修复它们将是一件麻烦事。

另一种解决方案是使用包含有关可选参数的信息的Options对象。 我们甚至可以使用构建器模式来构建此对象。

这是方法签名的样子:

interface RestService {   
    public List<Photo> getPhotos(PhotosOptions options);
}

开发人员现在知道可用的可选参数是什么,并且可以轻松地构建如下的PhotosOptions

PhotosOptions options = PhotosOptions.builder().sortBy(DESC).pageSize(200).build();
List<Photo> photos = getPhotos(options);

问题是我们试图用SDK覆盖的服务有很多我们需要实现的请求,而且几乎所有这些请求都有不同的选项列表。 这可能会导致大量的Options类。

这里最好的解决方案是什么? 为每个组合构建一个Options对象(及其构建器)? 继承在这里没有多大帮助,因为我有各种各样的参数组合。

更好的方法是使用选项对象,如您所示:

interface RestService {   
    public List<Photo> getPhotos(PhotosOptions options);
}

这是非常困难的方法,需要输入很多字母,你会有很多课程和其他麻烦。

但我的观点是,这种方式比其他方式更好,因为它提供了强大的方法签名,使您的SDK更具确定性。 如果您正确地按类别分隔您的类,您将看到这是一种更好的方法。

用户会告诉你谢谢。

前段时间我有同样的问题,经过几次尝试,我选择了这种方法,现在我很高兴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM