产品/技术框架
1 服务器端
1.1 LEMP
Linux + Nginx + MySQL(MariaDB) + PHP
1.2 Laravel
简洁、优雅的 PHP 开发框架
2 API接口
2.1 REST:Representational State Transfer
2.1.1 资源(Resources)
网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务。你可以用一个URI指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
"上网",就是与互联网上一系列的"资源"互动,调用它的URI。
2.1.2 表现层(Representation)
"资源"具体呈现出来的形式
比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。
2.1.3 状态转换(State Transfer)
访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变化。
因此,如果客户端通过"某种手段"操作服务器,服务器端就会发生"状态转化",而这种转化是建立在表现层之上的。具体实例中的"某种手段",就是HTTP协议(里面四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源。
2.1.4 总结一下RESTful架构:
(1)一个URI代表一种资源;
(2)客户端和服务器之间,传递的是这种资源的某种表现层;
(3)客户端通过“某种手段”,对服务器端资源进行操作,实现"状态转化"。
这是一组架构约束条件和原则,不是一种标准,不这么做你也可以完成任务,只不过你的接口得不到应有的好处.
3 Android端
3.1 Rxjava
用于多线程异步数据处理,是一种响应式编程,采取观察者模式(发布-订阅模式)。
流程:Observable-> Operator 1 -> Operator 2 -> Operator 3 -> Subscriber
- Observable 发出一系列事件,他是事件的产生者;
- Subscriber 负责处理事件,他是事件的消费者;
- Operator 是对 Observable 发出的事件进行修改和变换;
若事件从产生到消费不需要其他处理,则可以省略掉中间的 Operator,从而流程变为 Observable->Subscriber;
Subscriber通常在主线程执行,所以原则上不要去处理太多的事务,而这些复杂的事务处理则交给 Operator。
3.2 EventBus
组件间通信。
与Rxjava一样基于观察者模式,在异步数据流处理时Rxjava更为强大,可选择其中之一进行开发,目前打算用Rxjava 处理异步数据流,用EventBus实现组件通信。
使用原因:当我们的项目越来越复杂,使用Intent、Handler、Broadcast进行模块间通信、模块与后台线程进行通信时,代码量大,而且高度耦合。
3.2.1 机制:
- Event 事件。它可以是任意类型。
- Subscriber 事件订阅者。在EventBus3.0之前我们必须定义以onEvent开头的那几个方法,分别是onEvent、onEventMainThread、onEventBackgroundThread和onEventAsync,而在3.0之后事件处理的方法名可以随意取,不过需要加上注解@subscribe(),并且指定线程模型,默认是POSTING。
- Publisher事件的发布者。我们可以在任意线程里发布事件,一般情况下,使用EventBus.getDefault()就可以得到一个EventBus对象,然后再调用post(Object)方法即可。
3.2.2 四种线程模型:
POSTING (默认) 表示事件处理函数的线程跟发布事件的线程在同一个线程。
MAIN 表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作。
BACKGROUND表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程。
ASYNC 表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作。
3.3 OKHttp:网络请求。
get 方法/ post方法,可同步/异步,可传递Json对象。
3.4 fastjson:数据解析。
方便地使用json对象。
3.5 picasso:图片加载。
Android图形缓存库,允许应用程序无障碍图像加载。