在构建 RESTful 服务时,我总是遇到如何开发可以分发给系统用户的客户端库的问题。
举个简单的例子,假设有一个实体调用人员,并且您希望通过您的 RESTFul 服务支持基本的 CRUD 功能。
为了救人,客户端需要调用 POST 方法并传递适当的数据结构,比如 JSON。
要按生日查找人员,您的服务将回复包含人员对象列表的响应
- 要删除一个人,您的服务将响应成功或失败消息。
从上面的示例中,已经有两个对象可以与客户端共享:人员对象和响应对象。我尝试了几种方法来实现这一点:
在客户端库中包含来自服务器调用的 Person 对象。这种方法的缺点是:
客户端代码与您的服务器代码紧密耦合。服务器端的任何更改都需要客户端在同一版本中进行更新。
Person 的对象可能包含用于持久化或序列化的依赖项或注释。客户不关心这个
库,而是被迫包含它们。
包括一个 Map 的子类,它不直接紧贴 Person 的对象,但包含一些帮助类来设置所需的字段。
- 更松散的耦合,但当来自服务器的数据结构发生变化时可能会导致静默错误。
- 使用Apache Thrift、WADL或Json Schema等描述性文件在编译期间生成客户端对象。这解决了对象依赖的问题,但仍然产生了硬依赖。这几乎就像为 SOAP 创建一个 WSDL。但是,这种方法并未广泛使用,有时很难找到示例。
为您的应用程序发布客户端 jar 的最佳方式是什么,以便
- 它易于客户使用
- 不会产生紧密耦合和对服务器端更改的一些容忍度
如果您的回答是更好的 API 文档,那么从 Java 注释和 POJO 生成这些文档的好工具是什么。