【问题标题】:How should I link related data in a REST API?我应该如何链接 REST API 中的相关数据?
【发布时间】:2016-07-18 20:32:16
【问题描述】:

我正在设计一个 RESTful API 来表示订单和支付交易。我的(简化的)模型如下所示:

---------     ---------------
| order |----<| transaction |
---------     ---------------

即一个订单可以有很多交易。如果我有这些端点来获取资源:

/orders/{id}
/orders/{id}/transactions

第二个调用返回一个事务对象列表(扩展的或只是可以通过以下方式访问的 id:)

/transactions/{id}

那我应该如何更新订单资源来描述它的交易呢?

我是否应该将交易对象数据列表发布到/orders/{id}/transactions,它们将被创建并链接到订单资源?

或者我应该将每笔交易发布到/transactions,然后将交易ID列表PUT(或发布?)到/orders/{id}/transactions

...还是别的什么?

如果我已经有一个事务资源并且想要链接它怎么办?

【问题讨论】:

    标签: api rest


    【解决方案1】:

    您可以使用POST为订单创建交易,如下:

    POST /orders/{id}/transactions HTTP/1.1
    Host: example.org
    Content-Type: application/json
    
    {
      ... transaction representation ... 
    }
    

    要将现有交易链接到订单,您可以考虑 transaction 资源包含一个名为 order 的子资源。要替换交易的顺序,您可以使用PUT,在请求负载中发送订单标识符:

    PUT /transactions/{id}/order HTTP/1.1
    Host: example.org
    Content-Type: application/json
    
    {
      "order": 100 
    }
    

    或者,您可以使用PATCHJSON Patch 来部分更新事务资源:

    PATCH /transactions/{id} HTTP/1.1
    Host: example.org
    Content-Type: application/json-patch+json
    
    [
      { "op": "replace", "path": "/order", "value": 100 }
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多