我们正在构建Java SDK以简化对提供REST API的服务的访问。此SDK将由第三方开发人员使用。
其中一个问题是找到一种表示每个请求的可选参数的好方法。
假设我们有其余的端点:GET /photos
它有几个可选参数:sortBy
,pageSize
,pageNumber
等。
一种解决方案是接受Map<String,String>
作为表示该休息调用的api方法的参数。
interface RestService {
public List<Photo> getPhotos(Map<String,String> parameters);
}
此解决方案存在一些问题:
另一种解决方案是使用包含有关可选参数信息的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对象(及其构建器)?继承在这里没有多大帮助,因为我有各种各样的参数组合。
答案 0 :(得分:0)
更好的方法是使用选项对象:
interface RestService {
public List<Photo> getPhotos(PhotosOptions options);
}
这是非常困难的方法,需要输入很多字母,你会有很多课程和其他麻烦。
但我的观点是,这种方式比其他方式更好,因为它提供了强大的方法签名,使您的SDK更具确定性。如果您正确地按类别分隔您的类,您将看到这是一种更好的方法。
用户会告诉你谢谢。
前段时间我有同样的问题,经过几次尝试后我选择了这种方法,现在我很高兴。