在构建RESTful服务时,我总是遇到如何开发可分发给系统用户的客户端库的问题。为RESTful服务创建客户端
举一个简单的例子,假设有一个实体调用者,并且你想通过你的RESTFul服务来支持基本的CRUD功能。
救一个人,客户端需要调用POST方法并传递 合适的数据结构,说,在JSON。
要通过生日找人,你的服务将包含的人的名单响应回复对象
- 要删除的人,你的服务将有一个成功或失败的 消息作出响应。
从上面的例子中,已经有两个可以与客户共享的对象:人物对象和响应对象。我尝试了几种方法来完成此操作:
在客户端库中包含来自服务器调用的Person对象。这种方法的缺点是:
客户端代码与您的服务器代码紧密耦合。任何 从服务器端的变化将需要客户端在 相同的版本更新。
人的对象可能包含用于持久性或序列化的依赖项或注释。客户端并不关心这个库,而是被迫包含它们。
包含一个子类地图是不能直接紧人的对象,但包含一些辅助类设置必填字段。
- 松散耦合,但当服务器的数据结构发生变化时可能导致无提示错误。
- 使用描述性文件中像Apache Thrift,WADL或Json Schema在编译时生成客户端对象。这解决了对象依赖关系的问题,但仍然创建了一个硬依赖关系。这几乎就像为SOAP创建WSDL一样。但是,这种方法并未广泛使用,有时难以找到示例。
什么是发布您的应用程序客户端JAR的最佳途径,使
- 它便于客户使用
- 不创建紧耦合和一些容忍服务器端更改
如果您的答案是API的更好的文档,那么从Java注释和POJO生成这些文档的好工具是什么?
RESTFUL服务的重点在于客户端可以使用任何编程语言连接他想使用HTTP的B/C。我不会太担心为客户编写代码。但是有WADL文件描述RESTful服务。 – thatidiotguy 2013-02-21 22:14:57
是的,我同意,这就是为什么SOAP现在很受欢迎。但是,似乎每个使用您的服务的客户端都必须编写自己的版本。如果可以为流行语言提供一种语言,它将使采用变得更容易。 – ltfishie 2013-02-21 22:24:28
这就是为什么我提供最简单的示例代码给客户端从服务中提取数据,并且我的意思是HTTP请求。任何超过我认为是过度杀伤。 – thatidiotguy 2013-02-21 22:25:47