从nsurlsession、Alamofire到moya
更好的理解(抽象)、更少的构建(配置)、更方便的表达(语言)
一、iOS系统的网络编程(DSL概念)
ios缺省的网络编程只是给出了网络编程的基本概念:
urlsession、request、responde、缓存、会话、鉴权体系等;
给出了DSL的基本概念;
需要程序员自己根据需要对这些概念进行组装,生成自己的网络通信系统;
二、Alamofire(机制、构建)
可配置、易管理、层次清晰的网络通信模块。
Alamofire在iOS网络编程系统概念的基础上,进行了一系列的组装;
组装的结果是对七层网络通信模型的上三层:应用、表示、会话控制的缺省操作进行了一系列的完善。
1、应用层
- Upload File / Data / Stream / MultipartFormData
- Download File using Request or Resume Data
- Network Reachability
2、表示层
URL / JSON / plist Parameter Encoding
3、会话层
• Authentication with URLCredential
• TLS Certificate and Public Key Pinning
• Upload and Download Progress Closures with Progress
• Dynamically Adapt and Retry Requests
给应用提供了一系列便捷的网络管理配置接口,和网络调用接口;
Alamofire.request("https://httpbin.org/get", method: .get, parameters: nil, encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
if(response.error == nil){
LLog("请求成功")
LLog(response.result.value)
}else{
LLog("请求失败\(String(describing: response.error))")
}
}
三、Moya(表达、构建)
1、swift的语言风格抽象:enum、protocol、扩展
网络请求的构建、表达:使用枚举关联值定义扩展具体的请求
2、通过引入closure和通用代理机制更好的抽象了通信生命和会话管理机制。
3、通过rxswift扩展获取了更好的函数式编程的pipeline处理流程构建能力。
https://github.com/Moya/Moya/blob/master/Readme_CN.md
https://github.com/LeoMobileDeveloper/Blogs/blob/master/Swift/AnaylizeMoya.md
从nsurlsession、Alamofire到moya的更多相关文章
- Moya 浅析
Moya是一个高度抽象的网络库,他的理念是让你不用关心网络请求的底层的实现细节,只用定义你关心的业务.且Moya采用桥接和组合来进行封装(默认桥接了Alamofire),使得Moya非常好扩展,让你不 ...
- Android与Swift iOS开发:语言与框架对比
Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...
- Android &Swift iOS开发:语言与框架对比
转载自:http://www.infoq.com/cn/articles/from-android-to-swift-ios?utm_campaign=rightbar_v2&utm_sour ...
- 给iOS中高级求职者的一份面试题解答
前段时间更新了一篇 给iOS中高级面试官的一份招聘要求 收到很多小伙伴的点赞与关注.可能有很多小伙伴已经带着我在那篇文章给大家提供的一些面试技巧 & 其中的面试题 已经开始招聘或者应聘了!这里 ...
- iOS开发之Alamofire源码解析前奏--NSURLSession全家桶
今天博客的主题不是Alamofire, 而是iOS网络编程中经常使用的NSURLSession.如果你想看权威的NSURLSession的东西,那么就得去苹果官方的开发中心去看了,虽然是英文的,但是结 ...
- Moya/RxSwift/ObjectMapper/Alamofire开发
废话不多说直接上代码 // // MoyaNetWorking.swift // GreenAir // // Created by BruceAlbert on 2017/9/18. // Copy ...
- iOS开发之Alamofire源码深度解析
今天博客中的Alamofire源码的版本是以现在最新的3.4版本为例.上篇博客系统的对NSURLSession相关的东西进行了详细的解析,详情请看<详解NSURLSession>,为了就是 ...
- Alamofire 的使用
最近,AFNetworking 的作者Mattt Thompson提交了一个新的类似于 AFNetworking 的网络 基础库,并且是专门使用最新的 Swift 语言来编写的,名为:Alamofir ...
- Alamofire源码学习
Core文件夹: Alamofire.swift - - - 该文件中主要是给用户提供一些便利的调用方法,用户可以直接调用该文件中的便利方法来使用Alamofire相关功能. ...
随机推荐
- Class.forName() 与 ClassLoader.loadClass()的区别
看到一个面试题,说说Class.forName() 与 ClassLoader.loadClass()的区别,特意记录一下,方便后续查阅. 在我们写java代码时,通常用这两种方式来动 ...
- linux软连接和硬链接(总结)
参考博客: https://www.cnblogs.com/fengdejiyixx/p/10821820.html https://www.runoob.com/linux/linux-comm-l ...
- django环境搭建(基于anaconda环境)
环境:win7,anaconda,python3.5 1.介绍 Django特点:具有完整的封装,开发者可以高效率的开发项目,Django将大部分的功能进行了封装,开发者只需要调用即可,如此,大大的缩 ...
- k8s集群搭建(一)
k8s简介 kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写.是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简 ...
- 创建readonly只读用户脚本
身为一名运维工作人员,保证服务器的安全是必要项,当开发人员或测试人员需登录到服务器查看日志等操作时,可只给定特定的权限防止误操作的惨况产生. 以下脚本内容均为我本人环境,如有更改可自行修改. ~]# ...
- Elasticsearch+x-pack认证license过期处理
介绍: x-pack是Elasticsearch中的一个plugin,主要功能是实现认证功能 报错: 类似下面这样的报错,是因为licese过期导致的 解决: 1.首先去Elasticsearch的官 ...
- MySQL的rpm安装教程
Linux 上安装 MySQL Linux平台上推荐使用RPM包来安装Mysql,MySQL AB提供了以下RPM包的下载地址: MySQL - MySQL服务器.你需要该选项,除非你只想连接运行在另 ...
- JS高阶---简介+数据类型
首先看下大概流程 [一]基础 接下来看下数据类型分类和判断 (1)数据类型分类 基本类型/值类型5种 ---字符串String.数字Number.布尔值Boolean.未定义undefined.空nu ...
- 清理Linux 磁盘空间
1.执行 lsof | grep deleted发现有大量刚刚删除文件的进程存在,kill掉进程(或者重启进程) OK 2.查看磁盘信息:df -lh 3.循环定位最大文件目录:du -h - ...
- Q1094
一,看题 1,字符串确实是我的弱项. 2, 二,看题解 #include<iostream> #include<string> using namespace std; int ...