我要开发一个Web应用程序的iOS应用。 (该web应用程序使用代码点火器)
我要创建一个API服务的iOS应用会消耗。
我想建立一个API版本的,所以当Web API的变化,iOS应用就知道了。
关注:
- iOS应用程序将需要更新时,Web应用程序API的变化(除非我把旧的API available..Is这是一个很好的选择)
- 如果在Web应用API不更新iOS应用更新,这将导致一个问题太多
如果我的iOS应用程序指定它需要的API的版本?
- 如果iOS应用API小于网页API:显示信息:请更新iOS应用
- 如果iOS应用API比网页API度:显示信息:请更新的Web应用程序
这是最好的做法?
我应该为每一个版本的API类,并延续之前的版本,当他们改变重载方法?
例
ApiV1 extends CI_Controller
{
function list_customers(){//Code}
function saveSale() {//Code}
}
ApiV2 extends ApiV1
{
function saveSale()
{
//New way of saving sale
}
}
另外,如果我进行了更改数据库的结构,其中1.0版API将不再工作会发生什么? (实施例,改变了数据库表的名字吗?)
在一般情况下,你想你的服务API和客户端之间建立一个相当松散的耦合。 作为一项规则,将有客户总是在野外四处飘荡的多个版本,并且要尽可能少地强迫用户升级。
的API版本的完整版本号实际上是在Web服务中比较少见,而且通常只对应于数据模型,安全模型等允许多个版本共存可能需要在服务一些额外的工作显著的变化,但可以值得它允许现有客户继续工作。
为此,仔细一想,在设计前面对“模式”您正在使用作为一个抽象的实体独立于当前的客户端用户界面的需求。 (如果你想在你的具体情况更具体的想法,你可能希望张贴关于您建模需要一个单独的问题。)但是不要过分担心解决所有的永远事先的需求,因为需求将不可避免地发生变化。
一旦你做到了这一点,也为将来通过建立版本的一些概念引入服务API做准备。 有些事情要考虑:
- 一个明确的版本作为URL方案的一部分,或在如身份验证握手最初规定。 这是干净的命名空间的客户端访问有什么办法。 (前者将导致对服务明确的URL路由,后者将开裂的身份验证令牌之后,需要更多的体操路线。)
- 已知错误响应,意思是“这个API调用是过时的”,其早期客户端可以识别告诉用户他们的客户需要更新
在服务,您的设计可以为你注意的明确,与方法重写控制器,但在高一点的水平:该saveSale
方法有些不太可能表现版本之间非常不同。 这似乎更容易有saveSale
在V1的方法,做基线的事情,那么也许如保存在V2数据的一些额外位。 当这种情况发生时,代码可能只是条件分支,如果数据的额外位是存在的。 所有这一切是说,一个服务API并没有真正改变不兼容,往往的另一种方式。 list_customers
可能随着时间的推移返回更多的信息。 这并不一定意味着你的API需要一个新的版本或老客户不应该只是忽略他们不需要任何额外的信息。
回复:你对数据库表名的最后一个问题。 这些可以在内部改变,但你并不需要映射那些明确给客户端看到的东西。 API是一个稳定的接口应该理想地隐藏自己的不断发展服务的实现细节。
你会选择什么时候,作为一个整体,你决定,是显著改变,以至于它不能和平地服务现有客户的需求是什么API需要做的大局,以修订版的API。 你会选择弃用的和过时的某些客户端版本,当你决定在服务保持对他们的支持是造成你更头痛比安装底座值得(一个非常商业/案例具体问题)。
祝好运。
我不知道是否有你的iOS应用程序指定它需要的API的版本是很好的做法,但我认为这是一个安全的发挥; 一个关心不过,如果你经常更新你的API,那么它不会成为一个麻烦/是烦人不必频繁地更新应用程序之前很长。
我会保持传统方法姓名(或名称),并用不同的名称添加方法(S),以避免当您更改Web API更新到应用程序的新版本的用户。
我不会创建一个API类为每个版本的扩展API的早期版本。
我要说改变数据库的结构需要改变/更新的API,除非你也想保持你的表名或定义或数据,它是不是在大多数情况下/可行的情况下/实用/方便的旧版本。 在这种情况下,你希望你的用户更新到新的应用程序和API。
看看这个答案指向的API设计的原则和做法的介绍。
我不知道,什么最好的做法,但是我一定会建议您的iOS应用跟踪它正在寻找什么版本的API为,并明确要求的版本。 例如, '/ API / V1 / ....' 的网址。 这样,当你更新你的API,你可以简单地把它到一个不同的版本(“/ API / V2 / ...”,并留下V1单独的iOS应用进行消费。显然,你应该显示一条消息,iOS的用户升级(从你的反应或许元场),当有新版本出现。
这种方法应该让你继续你的API开发不带切断,人谁一直无法提升自己的应用程序。
更新
还有一件事; 如果你做出改变,这将使以前的版本无法使用(如更改表名称,模式等),你应该为你的iOS应用会理解的状态码。 与消息:“此版本的API相关的东西已经退役。 您必须更新”。
我也建议了类似的报头(或东西)当一个API已被弃用(即,一个新的版本存在)。 显然,继续提供所需的信息/行动,但警告该版本不支持了,他们应该升级(甚至触发您的应用程序升级的东西)会有所帮助。