设计模式 - 依赖于API密钥的数据库列

时间:2015-12-10 19:54:51

标签: design-patterns database-design

我正在开发一款iPhone应用程序,目前正在使用PHP构建Web API。对于此应用程序,我将定期从第三方API导入数据以存储在我的服务器端数据库中。

我的问题:如果我的每个数据库列的名称与我提取的相应API密钥的名称相同,那将是最简单的。这样,进口非常容易。但是,我的数据库将高度耦合到第三方API,如果他们决定有一天更改他们的API密钥,我将不得不更改我的数据库列。

处理这种情况的最佳方法是什么?我是否制作了某种关键映射器?另外,正如我正在解决这个问题,这是否属于某种设计模式?如果是这样,我很乐意对此进行更多的研究。

1 个答案:

答案 0 :(得分:0)

这是我最终做的事情。我决定转换'导入时的API密钥构成了我自己的API命名法。这样,对第三方API的任何更改只会影响我的导入类,而不会影响我的模型。

我有一个Parser课程:

Parser

然后每个class AgencyParser extends Parser { protected $key_mappings = [ 'agency_id' => 'agency_id', 'agency_name' => 'name', 'agency_url' => 'url', 'agency_timezone' => 'timezone', 'agency_lang' => 'language', 'agency_phone' => 'phone' ]; } 实现扩展基类$parser->parse();类并提供映射

grep

然后在我的客户端代码中,我调用$key_mappings然后从API中提取密钥并对映射数组进行交叉引用。这将创建我使用的Keys数组,并与我从API导入的数据合并。实际上,我正在为已知的API密钥执行{{1}}并将其替换为我自己的密钥名称。

现在,我的数据并不完全依赖于API密钥。如果一个或多个API密钥碰巧发生变化,我只需更新{{1}}中的那些密钥,我的应用程序仍将正常运行,而无需更改任何数据库列或任何我的模型代码。