内联API请求和响应

时间:2017-12-11 20:07:09

标签: json language-agnostic schema

我将用JSON代表我的问题,但任何接口语言都适用于此。

POST '/api/dog'

{
    id: 1,
    age: 8,
    breed: 11
    // Passing the breed name here doesn't make sense, 
    //   since we don't want to assign the breedName to the breed id
}

GET '/api/dog/1'

{
    // Retrieving the id here doesn't make sense,
    //   since we asked for it in our request
    age: 8,
    breed: 11,
    breedName: 'Golden Retriever'
}

另一种选择是将字典与对象一起返回。这适用于集合,但单个结果很难。

GET '/api/dog'

{
    dogs: [
        {
            id: 1, // not needed for ordered collections
            age: 8,
            breed: 11
        },
        {
            id: 2,
            age: 3,
            breed: 4
        },
        {
            id: 3,
            age: 3,
            breed: 11
        }
    ],

    breeds: [
        {
            id: 4,
            name: 'Chiwawa'
        },
        {
            id: 11,
            name: 'Golden Retriever'
        }
    ]
}

当然,这个问题也不仅限于名称 - 似乎总是会决定是否内联大型对象或仅仅是其ID。使用循环结构(即通过URL链接的网络图),不可能始终内联。同样,从不内联也是代价高昂的。

由于存在不可避免的权衡,我想了解最佳实践是什么。

  • API设计人员是否使用相同的模式进行输入和输出?如果是的话,那就做 他们在没有必要时省略了元素?
  • 传出架构是否应该扩展传入架构(反之亦然)以适应内联?
  • 何时(如果有的话)应该使用字典?
  • 字典数据应该通过单独的API调用来管理吗?

我正在寻找人们发现有用的指导方针,但任何理论上的答案对我都有用。

0 个答案:

没有答案