只是寻找有关Web服务界面设计的最佳实践的一些反馈。
我有两个选择:
选项1
public string GetSomeData(SomeCriteriaClass criteria);
其中SomeCriteriaClass定义为:
public int ID;
public string Name;
public string Property2; etc.
选项2
public string GetSomeData(int id, string name, string property2)
哪个首选?这似乎是设计模式的冲突 - 1是在一个类中包装参数,而另一个是保持Web服务接口的灵活性和开放性。
第二个问题是 - 如果我们选择Option1 - 你如何通过URL调用它?
由于
答案 0 :(得分:2)
您可以使用SOAP,努力实现选项#1。使用SOAP,您可以定义复杂的数据类型。 另一方面,您可以像选项#2那样使用“hack”方式,使用REST并在URL或HTTP POST消息中对参数进行编码。
答案 1 :(得分:2)
术语“网络服务”通常用于两种不同的事情。
一项技术:使用HTTP(S)作为进程间通信的协议。
架构方法:面向服务的架构。
如果我们将Web服务称为技术,那么您有很多选择:您可以使用HTTP GET(这是使用URL params的那个)或HTTP POST(数据位于HTTP的主体中)信息)。对于HTTP POST,有效负载可以是SOAP,也可以是任何适用的东西。
如果我们谈论面向服务的方法和Web服务作为工具,那么HTTP + SOAP是最标准的方法。
如果我们将Web服务方法仅仅视为服务操作的实现,那么请使用下面强调此方法的签名:
public FooResponse FooOperation(FooRequest request);
这意味着操作有一个请求和一个响应文档(即使其中任何一个是空的),您可以将服务合同(您公开的操作)和数据合同分开(如何组合请求和响应消息)。有关详细信息,请参阅此文章:Principles of Service Design Service Patterns and Anti-Patterns
结论:
答案 2 :(得分:1)
选项1公共字符串GetSomeData(SomeCriteriaClass标准); 这是实现webservice的好方法,因为你在使用SOAP和面向文档的术语。而option2适用于那些不太专注于设计模式的基础java开发人员。
让我们看一下场景 - 使用选项2之后,假设您想在SomeCriteriaClass.java中再添加3个varibale,那么您将选择哪种方式..将另外3个参数添加到GetSomeData()方法或在SomeCriteriaClass.java中声明。 / p>
一个好的设计模式关注者,选择在SomeCriteriaClass.java中声明不要在GetSomeData()中添加。