复合还是侧载?

时间:2016-06-06 22:59:39

标签: api rest restful-architecture

我对构建API相对较新,现在几次遇到以下两个术语,我有点困惑。我希望有人可以直截了当地提出我在维基百科上找不到的一些定义。我不确定它们是否可以在不打扰人的情况下可以互换使用,或者是否取决于你与谁交谈。

侧载

  • 在响应中可选地包含其他相关资源的能力
    例如。 /accounts?include=transactions我的transactions资源响应中会包含/accounts个资源吗?

  • 这实际上意味着我们通过将响应中的资源移动到他们自己的消息部分来避免重复资源,例如,而不是

    { "orders": [ { "id": "101", "product": { "id": "2000", "desc": "blah", "price": "100.0" } "id": "102", "product": { "id": "2000", "desc": "blah", "price": "100.0" }

    我们会:

    { "orders": [ { "id": "101", "product": { "id": "2000" } "id": "102", "product": { "id": "2000" } ], "products": [ { "id": "2000", "desc": "blah", "price": "100.0" }

复合文件

  • 简单地表示您在资源响应中混合了相关资源(也可以单独使用),例如。 accountstransactions资源可以单独申请,也可以在同一复合文档中合并?

1 个答案:

答案 0 :(得分:1)

我从来没有遇到过我认为是侧载或复合的正式定义,我认为你可以按照你想要的方式定义它,只要它与你的资源建模方式一致。

我无法想象人们对术语过于沮丧。基本前提是声音,其他一切只是语义和实现:)。也就是说,保持API对象模型相对纯粹且对客户端起作用是个好主意。

因此,如果它最有可能以嵌套产品的方式使用,那就是API自然的样子,那么重复

{ "orders": [ { 
  "id": "101", 
    "product": { "id": "2000", "desc": "blah", "price": "100.0" }
  "id": "102", 
    "product": { "id": "2000", "desc": "blah", "price": "100.0" }

可能不如添加

的间接问题
 {  "orders": [ { 
     "id": "101", 
        "product": { "id": "2000" }
     "id": "102", 
        "product": { "id": "2000" } 
     ],
    "products": [
         { "id": "2000", "desc": "blah", "price": "100.0" }