可以使用 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 怎么办?
他们将绑定到 CustomerReportFilter
和 ProductReportFilter
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作为参数。
我有这些方法
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 怎么办?
他们将绑定到 CustomerReportFilter
和 ProductReportFilter
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作为参数。