相信大家都封装过网络层. 虽然系统提供的网络库以及一些著名的第三方网络库(AFNetworking, Alamofire)已经能满足各种 HTTP/HTTPS的网络请求,但直接在代码里用起来,终归是比较晦涩,不是那么的顺手.所以我们都会倾向于根据自己的实际需求,再封装一个更好用的网络层,加入一些特殊处理.同时也让业务代码更好地与底层的网络框架隔离和解耦. Moya实际上做的就是这样一件事,它在 Alamofire的基础上又封装了一层,让我们不必处理过多的底层细节.按照官方文档的说法: It's…
Moya是一个高度抽象的网络库,他的理念是让你不用关心网络请求的底层的实现细节,只用定义你关心的业务.且Moya采用桥接和组合来进行封装(默认桥接了Alamofire),使得Moya非常好扩展,让你不用修改Moya源码就可以轻易定制.官方给出几个Moya主要优点: 编译时检查API endpoint权限 让你使用枚举定义各种不同Target, endpoints 把stubs当做一等公民对待,因此测试超级简单. Target 开始Moya之旅的第一步便是,建立一个Enum的Target,这个Ta…
akka-stream的Graph是一种运算方案,它可能代表某种简单的线性数据流图如:Source/Flow/Sink,也可能是由更基础的流图组合而成相对复杂点的某种复合流图,而这个复合流图本身又可以被当作组件来组合更大的Graph.因为Graph只是对数据流运算的描述,所以它是可以被重复利用的.所以我们应该尽量地按照业务流程需要来设计构建Graph.在更高的功能层面上实现Graph的模块化(modular).按上回讨论,Graph又可以被描述成一种黑盒子,它的入口和出口就是Shape,而内部的…
相关博文: 从消费者角度评估RestFul的意义 SpringBoot 构建RestFul API 含单元测试 REST是目前业界相当火热的术语,似乎发布的API不带个REST前缀,你都不好意思和别人打招呼了. 然而大部分号称REST的API实际上并没有达到Richardson成熟度模型的第三个级别:Hypermedia. 而REST的发明者Roy Fielding博士更是直言“Hypermedia作为应用引擎”是REST的前提, 这不是一个可选项,如果没有Hypermedia,那就不是REST…
Endpoints Endpoint是一种半私有的数据结构,Moya用来解释网络请求的根本构成.一个endpoint储存了以下数据: The URL. The HTTP method (GET,POST,等). The request parameters. The parameter encoding (URL,JSON,自定义,等). The HTTP request header fields. The sample response (单元测试用). Providers 将 Target…
在Android开发中有非常强大的 Retrofit 请求,结合RxJava可以非常方便实现 RESTful API 网络请求.在 iOS开发中也有非常强大的网络请求库 Moya ,Moya是一个基于 Alamofire 开发的,轻量级的Swift网络层.Moya的可扩展性非常强,可以方便和RXSwift.ObjectMapper结合. 测试 REST API 定义 我们先用服务端定义几个REST API,开发者根据自己的条件来实现. 请求错误格式实例 { "error": "…
更好的理解(抽象).更少的构建(配置).更方便的表达(语言) 一.iOS系统的网络编程(DSL概念) ios缺省的网络编程只是给出了网络编程的基本概念: urlsession.request.responde.缓存.会话.鉴权体系等: 给出了DSL的基本概念: 需要程序员自己根据需要对这些概念进行组装,生成自己的网络通信系统: 二.Alamofire(机制.构建) 可配置.易管理.层次清晰的网络通信模块. Alamofire在iOS网络编程系统概念的基础上,进行了一系列的组装: 组装的结果是对七…
因为做性能测试分析的人来说,HTTP 协议可能是绕不过去的一个槛.在讲 HTTP 之前,我们得先知道一些基本的信息. HTTP(HyperText Transfer Protocol,超文本传输协议),显然是规定了传输的规则,但是它并没有规定内容的规则.  HTML(HyperText Marked Language,超文本标记语言),规定的是内容的规则.浏览器之所以能认识传输过来的数据,都是因为浏览器具有相同的解析规则. 我们首先关注一下 HTTP 交互的大体内容.想了很久,画了这么一张图,我…
 Java IO系统     "对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务."     由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的.其中最大的挑战似乎是如何覆盖所有可能的因素.不仅有三种不同的种类的IO需要考虑(文件.控制台.网络连接),而且需要通过大量不同的方式与它们通信(顺序.随机访问.二进制.字符.按行.按字等等).     Java库的设计者通过创建大量类来攻克这个难题.事实上,Java的IO系统采用了如此多的类,以致刚开始会产生不知从何处…
本文主要译自 zguide - chapter two. 但并不是照本翻译. 上一章我们简单的介绍了一个ZMQ, 并给出了三个套路的例子: 请求-回应, 订阅-发布, 流水线(分治). 这一章, 我们将深入的探索一下ZMQ中的socket, 以及"套路" socket API 如果熟悉linux socket编程的同学阅读完了第一章, 一定有一种说不上来的别扭感觉.因为通常情况下, 当我们讨论socket的时候, 我们一般指的是操作系统提供的网络编程接口里的那个socket概念. 而在…