我有一个后勤问题:我正在试图找出管理与应用程序不同步的API的最佳方法。解释它的最好方法是举个例子:
假设MyApp版本1.0发布到需要first_name,last_name和email的“submit_feedbacK”API。
然后我将MyApp版本2.0提交到App Store。该版本旨在将first_name,last_name,gender和email发布到API。所有这些都是API上的必填字段。
我遇到的问题: - 如果我在新应用程序生效之前更新API,它将破坏版本1.0 - 如果我等到2.0版现场直播并远程瘫痪1.0,我必须正确计时。
我猜测'正确答案'是维护两种不同的API。但如果两个API都发布到同一个实时数据库,那会让事情变得有点尴尬。
有没有人有关于如何建模的建议?
答案 0 :(得分:8)
此问题可能会与iOS consuming API design分享一些方面。
正确的答案肯定是提供两个API(至少在用户调整时的短时间内)。您不必同时维护两个版本,因为一旦发布了较新版本,您可以维护该版本,并为旧版用户提供旧版本。您可能需要做的唯一真正的改变是安全补丁或主要问题。主要更改(例如您决定重新构建整个数据库)可能导致旧版本不再起作用,但是对更新的API版本的更新应该设计为允许以前的版本仍然起作用。
我将您链接到的另一个问题给出了答案,说明如何让不同版本的应用访问API的正确版本。
另一个注意事项是,您可能更容易(取决于您正在使用的框架)将API设计为引擎或子应用程序,并简单地将它们安装在不同的端点。我知道这可以通过使用Engines在Rails中轻松实现,在使用带有子应用程序的app.use()的Node中可以轻松实现。
答案 1 :(得分:0)
我会使用webservice / http端点与您的应用程序进行通信。如果您优先在应用程序的所有版本中维护相同的URL,则在服务器的所有请求/帖子中包含版本号,以便它知道如何处理它们。这也将使开发和测试更容易,因为新版本可以测试服务器上的新api。
因此,您可以在webservice / server中调用任何函数,添加一个带有版本号的变量。一旦你点击同一个函数的256个版本(如果有的话),我认为你可以重新开始并且“杀死对v1.0的支持”,这应该足够了。
一旦服务器收到带有数据的请求/帖子,您就可以在服务器API中编写一个简单的开关/案例结构,因此支持适用于这两个版本。
如果它们相似,但是例如。交换参数或其他东西,您可以处理所有这些服务器端,并且可以在解决方案的服务器部分维护BAL / DAL(n层结构)。
顺便说一下。我的答案不仅仅适用于iOS或智能设备,而是适用于“正在进行中”生产设置的客户端/服务器方法,其中所有内容都必须在线,同时仍处于开发和维护状态。
希望它有意义,否则,对它进行评论,我会尝试进一步解释。
答案 2 :(得分:0)
仅供参考,我使用CodeIgniter。我正在使用https://github.com/philsturgeon/codeigniter-restserver提供的REST控制器。我最终确定每个版本都有不同的终点。基本上我会为每个版本检查一个新的存储库并将其放入一个唯一的目录中。 (即http://www.mysite.com/1.0/api/method,http://www.mysite.com/1.1/api/method等)试图在一个代码库下维护多个版本的API听起来太可怕了。至少当我发布一个版本时,我会知道它是锁定的,我不必担心打破它。 (注意:我必须使用特殊的.htaccess调整来从同一个域运行多个CodeIgniter实例。如果你愿意,我可以分享它)