可以使用 class 作为 API 参数吗?

Is it ok to use class as an API parameter?

我有这些方法

public class ReportService
{
    public DataTable GetCustomerReportDataTable(String dateFrom, String dateTo, String cif, String customerName, String region, String branch, String salesCode);
    public DataTable GetProductReportDataTable(String dateFrom, String dateTo, String cif, String customerName, String product, String region, String branch, String salesCode);
}

并想将其重构为(下)基于this and this

public class CustomerReportFilter
{

    public String DateFrom { get; set; }
    public String DateTo { get; set; }
    public String CIF { get; set; }
    public String CustomerName { get; set; }
    public String Region { get; set; }
    public String Branch { get; set; }
    public String SalesCode { get; set; }
}

public class ProductReportFilter
{

    public String DateFrom { get; set; }
    public String DateTo { get; set; }
    public String CIF { get; set; }
    public String CustomerName { get; set; }
    public String Product { get; set; }
    public String Region { get; set; }
    public String Branch { get; set; }
    public String SalesCode { get; set; }
}

public class ReportService
{
    public DataTable GetCustomerReportDataTable(CustomerReportFilter filter);
    public DataTable GetProductReportDataTable(ProductReportFilter filter);
}

问题:

如果 API 呼叫者来自其他 language/technology 怎么办?
他们将绑定到 CustomerReportFilterProductReportFilter class.

我不确定你在问什么,但对于你的功能,Builder 模式是合适的。

Report.Builder builder = new Report.Builder();
builder.setDateFrom(...).setDateTo(...).setCif(...);
DataTable tbl = builder.build();

这样您就不会混淆您的字符串顺序并且可以省略任何可选字符串。

当我使用 ASP.Net MVC 实现此 API 时,它的 JSON 绑定会自动将 JSON 字符串转换为强类型 .Net 对象。所以不同的语言可以使用他们的 REST 客户端调用这个 API 然后 POST 一个 JSON 字符串。

对于 Java 等其他语言,我已阅读 RESTful Java client with java.net.URL

我假设绑定到 API 参数 class 没有问题,因为有自动转换器。

更新:
Here,明明是The solution is to create a Data Transfer Object that can hold all the data for the call. It needs to be serializable to go across the connection.
所以,建议使用class作为参数。