【问题标题】:What is the best approach to implement HATEOS REST API to return an aggregate Order object?实现 HATEOS REST API 以返回聚合 Order 对象的最佳方法是什么?
【发布时间】:2021-04-19 00:57:31
【问题描述】:

我正在使用 .net 核心并有两个名为 Customer_ApiOrder_Api 的微服务。我正在尝试坚持 RESTful 最佳实践并应用 HATEOS。我有一个看起来像这样的Order 模型类:

    public class Order : BaseEntity
    {
        public string TransactionId { get; set; }

        public decimal Total { get; set; }

        public Guid CustomerId { get; set; }

        public virtual Customer Customer { get; set; }

        public Guid DeliveryAddressId { get; set; }

        public virtual OrderDeliveryAddress DeliveryAddress { get; set; }

        public ICollection<OrderLine> OrderLines { get; set; }
    }

假设:

  1. 假设这是一个中等规模的电子商务系统,有大量请求进入我们的微服务
  2. 我们的订单类代表了正确且足够的结构

问题:

现在,我正在编写一个 GET API 来返回单个 order。如果我想坚持使用 HATEOS,这是否意味着 API 响应不应包含客户对象(例如客户姓名),而只需返回客户 ID 和 URL 链接,客户可以使用该 URL 链接从客户微服务?对于订单行和交货地址,或者基本上,对于可能进入我们的Order 对象的任何其他资源,我们应该返回相对的 GET URL 而不是对象本身。坚持HATEOS?

我会说订单对象的 HATEO 响应在 JSON 中应该如下所示:

{
     "transactionId": "blabla",
     "customerId": "blabla",
     "customerUrl": "https://localhost:443/customer/blabla",
     "orderLines": [ { "id": "bla", "orderUrl": "https://localhost:442/order/bla" } ],
     ....
}

这有意义吗?或者这是过度杀戮?或者可能效率不高?如果有人能证实我的想法或为我澄清这一点,我们将不胜感激。

【问题讨论】:

  • 启发式:想想你将如何在网络上使用 HTML 进行操作。

标签: api rest asp.net-core restful-url


【解决方案1】:

我认为您可以有一种方法来创建 HEATOS 链接。该方法transactionIdcustomerIdorderLines 并在结果响应中构建并附加customerUrl

例如

  //exaple reository
    public order GetOrderRepository()
    {
        Random r = new Random();
        return new order()
        {
            orderId = r.Next(0, 99999)
        };
    }
    //exaple endpoint
    [HttpGet]
    public ActionResult<order> getOrder()
    {
        var order = GetOrderRepository();
        return Ok(GetOrderWithHeatos(order));
    }
    //our HEATOS builder
    public order GetOrderWithHeatos(order order)
    {
        order.orderUrl = new Uri($"AbsloutePath/{order.orderId}").ToString();
        return order;
    }

【讨论】:

    猜你喜欢
    • 2021-07-18
    • 2021-05-12
    • 2011-02-13
    • 2011-06-21
    • 1970-01-01
    • 2022-12-24
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多