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

标签 java api rest sdk builder-pattern

我们正在构建一个 Java SDK,以简化对我们提供 REST API 的服务之一的访问。此 SDK 供第 3 方开发人员使用。

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

假设我们有剩余端点:GET /photos 其中有几个可选参数:sortBy , pageSize , pageNumber

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

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

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

  • 该方法的签名未向开发人员提供有关此方法可用的可选参数名称(以及有效值)的信息。他需要查阅 REST api 文档,理想情况下我们希望避免这种需要。
  • 开发人员最终会创建多个带有他将要调用的方法的参数的 Map,并在各处对参数的名称和值进行硬编码。这意味着如果它们发生变化,修复它们将很麻烦。

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

这是方法签名的样子:

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 对象(及其构建器)?继承在这里没有多大帮助,因为我有各种参数组合。

最佳答案

更好的方法是使用您展示的选项对象:

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

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

但我认为这种方式比其他方式更好,因为它提供了强大的方法签名,使您的 SDK 更具确定性。如果你正确地按包分隔你的类,你会发现这是一种更好的方法。

用户会告诉你谢谢。

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

关于java - 如何将 REST 请求的参数传递给 Java 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320814/

相关文章:

Java Toolkit 屏幕分辨率偏差

linux - 警告 : the use of `tmpnam' is dangerous, 更好地使用 `mkstemp'

java - 如何在 Servlet 中调用 java Rest WebService

java - 蓝色混合 : Java Rest API starter app

java - 为什么 BufferedReader.read(char[]) 似乎跳过字符,而 read() 却没有?

java - 在 Android 中执行多个 Activity

javascript - StackOverflow API - 显示结果时出现问题

java - 用于编排 Web 服务的工具

java - 如何始终在屏幕中央打印字符串?

java - 如何从 LibGDX java 实现调用 Parse.com API?