我正在开发一款iPhone应用程序,目前正在使用PHP构建Web API。对于此应用程序,我将定期从第三方API导入数据以存储在我的服务器端数据库中。
我的问题:如果我的每个数据库列的名称与我提取的相应API密钥的名称相同,那将是最简单的。这样,进口非常容易。但是,我的数据库将高度耦合到第三方API,如果他们决定有一天更改他们的API密钥,我将不得不更改我的数据库列。
处理这种情况的最佳方法是什么?我是否制作了某种关键映射器?另外,正如我正在解决这个问题,这是否属于某种设计模式?如果是这样,我很乐意对此进行更多的研究。
答案 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}}中的那些密钥,我的应用程序仍将正常运行,而无需更改任何数据库列或任何我的模型代码。