SQL - REST - 使用友好ID存储数据并检索它

时间:2018-06-08 17:58:41

标签: sql rest

更新09/06/2018

我的模特看起来像这样:

public class Activity
{
    public int Id { get; set; }

    public List<Additive> Additives { get; set; }
}

public class Additive
{
    public int Id { get; set; }
    public int ActivityId { get; set; }

    public Activity Activity { get; set; }
}  

原始问题

我正在开发一个RESTful API,我希望以最干净的方式做到这一点。

目前我正在进行数据检索。所以我得到了这个

如果我创建一个名为activity的新资源并且它有一个对象数组,那么就说(硬编码,不具代表性):

{  
"name": "act1",  
"objects": [  
    { "obj1":"val1" },  
    { "obj2":"val2" }]  
}

我可以添加或删除数组中的对象 现在,我的问题是,如果我想用这样的URL访问它们:

 Api/activity/1/objects/2

告诉MySQL这个对象是我列表的第2个对象的正确方法是什么?

或许我应该在后端选择Act1的所有对象并过滤它们以仅检索第2个。

2 个答案:

答案 0 :(得分:1)

REST服务中的资源具有稳定的URL非常重要。所以要弄清楚第二个&#39;是的,你真的需要考虑在列表中排名第二的意义。

你是按照什么订购的吗?如果是这样,使用此结构可能是一个坏主意,因为添加新条目可能会改变顺序以及“第二”的结果。之前可能不再是将来。

您可以做的最好的事情是为这些条目添加某种新ID,因此uri访问特定资源将始终返回该资源(或404等)。

答案 1 :(得分:0)

我终于找到了我想要的答案。 mysql two column primary key with auto-increment

这是MyISAM引擎功能。

  

对于MyISAM和BDB表,您可以在多列索引的第二列上指定AUTO_INCREMENT。在这种情况下,将为AUTO_INCREMENT列生成的值计算为MAX(auto_increment_column)+ 1 WHERE prefix = given-prefix。当您要将数据放入有序组中时,这很有用。

就我而言,此查询可以完成

CREATE TABLE additive (
    id INT NOT NULL AUTO_INCREMENT,
    activity_id INT NOT NULL,
    other_column VARCHAR(30) NOT NULL,
    PRIMARY KEY (activity_id, id)
) ENGINE=MyISAM;