如何将REST请求的参数传递给Java方法?
我们正在构建一个JavaSDK,以简化对提供RESTAPI的服务之一的访问。此SDK将由第三方开发人员使用 问题之一是找到一种好的方法来表示每个请求的可选参数 假设我们有rest端点:如何将REST请求的参数传递给Java方法?,java,api,rest,sdk,builder-pattern,Java,Api,Rest,Sdk,Builder Pattern,我们正在构建一个JavaSDK,以简化对提供RESTAPI的服务之一的访问。此SDK将由第三方开发人员使用 问题之一是找到一种好的方法来表示每个请求的可选参数 假设我们有rest端点:GET/photos 它有几个可选参数:sortBy,pageSize,pageNumber,等等 一种解决方案是接受Map作为表示rest调用的api方法的参数 interface RestService { public List<Photo> getPhotos(Map<Str
GET/photos
它有几个可选参数:sortBy
,pageSize
,pageNumber
,等等
一种解决方案是接受Map
作为表示rest调用的api方法的参数
interface RestService {
public List<Photo> getPhotos(Map<String,String> parameters);
}
问题在于,我们试图用SDK覆盖的服务有大量需要实现的请求,几乎所有请求都有不同的选项列表。这可能会导致大量选项类别。
这里的最佳解决方案是什么?为每个组合构建一个选项对象(及其生成器?继承在这里没有太大帮助,因为我有各种各样的参数组合。更好的方法是使用选项对象,如您所示:
interface RestService {
public List<Photo> getPhotos(PhotosOptions options);
}
接口RestService{
公共列表获取照片(照片选项);
}
这是一个非常困难的方法,需要输入大量的字母,你会有很多的类和其他屁股痛
但我的观点是,这种方法比其他方法更好,因为它提供了强大的方法签名,使您的SDK更具确定性。如果您正确地按包分隔类,您将看到这是一种更好的方法
用户会告诉你谢谢
不久前我也遇到了同样的问题,经过几次尝试,我选择了这种方法,现在我很高兴。如果这对你有帮助,现在就不要问了。我写的这是一个REST客户端库,它允许通过编写REST服务的接口(字面上是java接口)来使用REST服务。请随意使用。我也相信这是最好的方式。然而,我担心我们最终将不得不编写和维护过多的选项类(及其构建器)。我们想知道sdk用户的好处是否弥补了额外的工作和复杂性(通过大量增加类的数量)。
PhotosOptions options = PhotosOptions.builder().sortBy(DESC).pageSize(200).build();
List<Photo> photos = getPhotos(options);
interface RestService {
public List<Photo> getPhotos(PhotosOptions options);
}