Tag: Rage

带有Rage的iOS中的实用网络

这篇文章是关于Rage的,Rage是我们的库,用于抽象iOS中的API实现。 如今,很少有移动应用程序没有API。 因此,我们必须每次为每个新项目创建网络层。 从移动开发的角度来看,我们看到每个后端的实现方式有何不同。 它在很大程度上取决于所选的服务器技术,例如严格且可预测的Java和.net,灵活且不同的node.js,ruby和python。 同时,在处理移动应用程序时,我们始终具有相同的技术堆栈,并且我们希望拥有清晰可预测的代码,每个项目看起来都相似。 世界状况 当您从Android世界过渡到iOS开发领域时,您将不可避免地对这里非常流行的模式感到惊讶。 出于联网目的,Apple的URLSession相当不错,但是许多项目仍使用Alamofire (它是AFNetworking的后继产品) 。 有Moya ,它比Alamofire更高 。 Moya很不错,我们在某些项目中使用了它。 它有充分的文档证明和测试,但是它的枚举滥用语法是我们无法忍受的。 在相同的枚举中,API描述立即变成大量的开关盒。 单个请求的每个参数都在其自己的位置描述,当您尝试了解单个请求的所有内容时,这确实令人困惑。 我们接受Moya的意识形态认可,但这会影响我们的生产力。 有时候,看起来像莫亚(Moya)自己陷入了困境。 Android世界的主要流行词是OkHttp , Retrofit和Moshi 。 没有人质疑他们为什么这么好。 我们也自然希望在iOS中也有这样的事情。 Swift没有我们在Java / Kotlin中常用的注释处理,因此在此处进行直接类似并不容易。 据说, Swift 4解决了JSON问题。 OkHttp为网络请求规范提出了一种不错的构建器样式语法。 Retrofit提出了一种描述请求列表的方法,如何对数据进行序列化/反序列化以及应使用哪个http客户端进行请求。 愤怒 愤怒做了类似的事情。 这是我们的库,使API规范更具可读性和更清晰。 我们努力减少错误,并力争拥有高定制能力。 这就是我们创建Rage的原因 。 我们之所以给该库起这个名字,是因为在使用该库之前在iOS应用中实现API时必须处理的所有事情。 基本上,我们可以将网络层表示为请求描述列表以及有关一般如何发出请求(即客户端)的信息。 客户发出请求。 它知道有关所有请求的常规信息。 每个请求都有其自己的特定参数。 至此,我们为客户端提供了以下参数: 基本网址 基本ContentType URLSessionConfiguration 一些插件,例如记录器 所有请求的标题 请求授权流程说明 这是我们对每个特定请求的要求: 网址 内容类型 […]