使用Swift中的路由器为IOS应用程序更好地路由

在这篇文章中,我将讨论在我正在努力使IOS应用程序开发更强大的项目中使用的其他可重用类。 我最近需要导航路由器来处理网络请求中不同类型的URL,处理一堆.GET,.POST,.PUT。 删除HTTP请求类型等

使用单独的类来处理网络任务是一个好主意。 因此,使用自定义路由器。 它当然是基于Alamofire。

什么是路由器?

路由器是一种处理API /微服务url的面向协议的方法,但将自身用作枚举是一个更好的主意。 通过从枚举案例中生成URL请求,这将无缝地在发出请求时帮助统一和简化网络路由。

因此,另一种方法启发了我一些概念,您可以阅读LittleBitesOfCocoa中的博客文章。 公平地说,它更轻巧,但不能满足我的要求。

#93:为Alamofire创建路由器🔀🔥
Alamofire 3.0(https://github.com/Alamofire/Alamofire/blob/master/Documentation/Alamofire%203.0%20Migration%20Guide.md…littlebitesofcocoa.com

创建路由器协议

首先,创建一个协议RouterProtocol来处理四种方法,以使REST兼容(获取,发布,更新,销毁),以处理常见的API请求(我刚刚声明了自己的ApiType来获取API URL的路径/路由,因此不是)在上下文中,则省略。)

接下来要做的就是创建一个路由器枚举 ,这个实现为什么呢? 我会解释。

  • 首先,我们需要遵循RouterProtocol才能使用我们的功能。
  • Router枚举必须为通用类型,必须接受具有RouterProtocol一致性的任何类型的结构。
  • 它接收四个动词(.GET,.POST.PUT,.DELETE等),因此可以为其声明方法,路径和路由属性。
  • 将URLRequest属性创建为NSMutableURLRequest,因此添加常用配置,例如方法,默认标头,OAuth令牌(如果可用)等。
  • 最后,使用Alamofire的参数编码可以执行所需的编码。

用法

使用路由器非常简单,只需在ApiManager中声明一个方法(我将在另一篇文章中介绍我的ApiManager版本)

  • 在我的示例中,getAccounts方法将AccountsRequest作为输入 ,response作为AccountsResponse作为输出,此类仅是结构,您可以自己滚动 (仅供参考:在另一篇文章中,我将向您介绍基于“请求/响应”结构的方法)
  • 您的经理(当然,它封装了Alamofire实例)会执行请求(可到达性和微调器内容不在上下文中。我会在此处发布有关可到达性的信息,您可以在此处阅读)
  • Alamofire管理器将Router枚举作为输入,并具有我们的RouterProtocol,我们说这是一个.GET请求,所以我确实将诸如accountRequest.accountId的值作为String传递,因为在协议中。GET匹配请求具有“ case get(T,String) ”
  • 如果我们需要说这是一个.POST请求,则协议.POST可以将 [ String:AnyObject])作为参数,因此,这一次我必须将我的accountRequest输入传递为cast到Dictionary()? [String:AnyObject])

简单!

例如;
Router.get(AccountsRou​​ter(),accountRequest.accountId!)。URLRequest

现在,您可以看到为任何种类的Api创建任何种类的Router都具有表现力。 它始终严格定义,可理解且干净。

这篇文章中的代码,托管在Github中

seyhunak /路由器
在Swift github.com中使用路由器为IOS应用程序更好地路由

感谢您的阅读,希望您喜欢。