【问题标题】:Web Service (web method) String return type网络服务(网络方法)字符串返回类型
【发布时间】:2013-06-05 12:08:09
【问题描述】:

我有一个关于最佳做法的问题。假设我有一个返回员工 ID 和员工姓名的 Web 方法。现在,由于我是 Web 服务的新手,我们(客户端(C#)和我(Java))同意返回类型 List<String> 和字符串格式是 employee id,employee name。到目前为止一切都很好。程序运行并完成工作。

现在,前几天,我正在与另一位开发人员讨论返回类型,她建议我返回数据的方式不正确,而是我应该返回 XML 格式的字符串,这样典型的输出可能看起来像(这里没有格式),

 <root><employee><employeeId>1234</employeeId><employeeName>firstname lastname</employeeName></employee></root>

我认为,在这种情况下,您将 50% 以上的非数据(XML 标记)返回给客户端,这是不必要的,并且会浪费带宽并增加开销。她反驳说,在不明显的情况下,例如,用户无权访问某些内容或没有什么可返回但错误代码或服务器上出现问题,即当您需要返回实际数据本身以外的其他内容时, XML 字符串很有帮助,因为您可以插入标签。这是一个有效的论点,所以对 Web 服务有良好经验的人可以在这里解释一下吗?

【问题讨论】:

  • 我建议不要使用这些方法。为了获得更轻松的体验,请改用 RESTful 服务,也就是说,返回将是 JSON 格式的字符串,易于从生产者编写并在消费者端进行解释。更多信息:Representational state transfer

标签: java xml web-services return-type


【解决方案1】:

基本上,当您的列表被序列化时,它将被转换为 XML,尽管格式如下:

<Value>EmployeeId, EmployeeName</Value>

标签实际上并不是不必要的,事实上它们很有帮助,因为它们保存了数据并且它是具体的数据类型。我不喜欢返回 XML 字符串,因为它容易出错,而且您可能总是需要更新字符串的值。我的建议是返回一个包含您的结果集和错误描述属性的对象。

public class ReturnObject
{
   public List<Employee> list {get; set;}
   public String ErrorDescription {get; set;}
}

public class Employee
{
   public int EmployeeID {get; set;}
   public string EmployeeName {get; set;}
}

在这里,您的 Web 服务将返回带有附加属性“ErrorDescription”的具体类型,如果您需要返回任何验证或身份验证错误,您可以使用该属性。使用 SoapUI 测试序列化的返回对象是 XML。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多