Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 丑陋数据库的API_Ruby On Rails - Fatal编程技术网

Ruby on rails 丑陋数据库的API

Ruby on rails 丑陋数据库的API,ruby-on-rails,Ruby On Rails,我们在我的工作场所有一个相当丑陋的遗留数据库。注意,我并不是一个数据库专家,但有些事情看起来很奇怪。例如,下面这样的表格很常见 Zuser zuserid shoerdesc description virtualattributes birthdate1 birthdate2 qa_bookstoreid 我们最近启动了一个“假定的”RESTAPI,它充当数据库中一些表的转储。最终用户会得到大量空值字段、难以解释的数据和大量垃圾数据 API示例: { "las

我们在我的工作场所有一个相当丑陋的遗留数据库。注意,我并不是一个数据库专家,但有些事情看起来很奇怪。例如,下面这样的表格很常见

Zuser
  zuserid
  shoerdesc
  description
  virtualattributes
  birthdate1
  birthdate2
  qa_bookstoreid
我们最近启动了一个“假定的”RESTAPI,它充当数据库中一些表的转储。最终用户会得到大量空值字段、难以解释的数据和大量垃圾数据

API示例:

{
  "last_updated" : "2010/10/10",
  "details" : {
    "zuserid"   : "b5b4546b3b33b",
    "birthday1" : "1980/10/10",
    "birthday2" : "1980/10/10",
    "zaccess"   : null,
    "zwebsite"  : null,
    ..
  }
}
为了使API能够与实际使用它的单个客户机一起工作,我们必须进行大量的手工操作,告诉他们向最终用户显示什么,等等

好消息是高层人员表示有兴趣在将来使API更通用、更易于使用。从那以后,我已经开始寻找这种情况下的良好实践,但我的数据库经验非常有限,我不确定该去哪里寻找。(我主要是一名软件/网络工程师。)

我主要研究了DataMapper模式(我们在Rails中使用ActiveRecord)。看起来确实需要做很多工作,但我仍然不确定是最好在应用程序级别进行映射,还是创建一个在新数据库中进行映射的新应用程序,并以某种方式将两者同步


有什么好的解决方案吗?最好是不会破坏现有数据库的东西。请注意,我的“corpochain”级别相当低,因此大多数决策都是由其他人做出的。

根据我的经验,任何好的RESTAPI都需要相当多的映射到其域模型。否则,API会泄漏内部域,或者内部域最终会按照API建模——这两种方法都远远不够理想

我的建议是,将您的API与您的域模型完全分离,这样您就可以在不影响其他API的情况下对其进行改进。有些人更进一步,将域模型与持久实体分开(Robert C.Martin大力提倡这一点……即使在Rails中也是如此)

如果您做出这个决定,那么您可以开始考虑我们的客户想要什么API?使其易于使用、一致且与您的客户相关(正如您所提到的,握手是API不清晰的症状)